我有一個回傳類似以下內容的陣列:
const arr = [
{
"id": "5ac2f57f-61cf-454b-9457-484b8484c1d3",
"userID": "7d21e968-f32a-4cb9-a0db-dd98d1d2973a",
"tag": "REPORT_CREATE",
},
{
"id": "3d302f03-75da-40cf-8b86-d9673fdc3b4a",
"userID": "1dafdb46-a49e-4194-9e5b-9c44be7e4cda",
"tag": "REPORT_CREATE",
},
]
我需要回傳“userID”的頻率,但正如你所看到的,它是一個子項。
所以如果我做這樣的事情:
function getOccurrence(array, value) {
var count = 0;
array.forEach((v) => (v === value && count ));
return count;
}
console.log(getOccurrence(arr, "userIDsomething"));
那不會,因為它userID
必須是物件本身,而不是在 [0]、[1] 等內部。但我被困在那里。有什么建議?
uj5u.com熱心網友回復:
您只需要與陣列中專案value
的userID
屬性進行比較,而不是與專案本身進行比較。此外,它可能會簡化您的代碼以使用filter
.
嘗試這個:
function getOccurrence(array, value) {
return array.filter((v) => v.userID === value).length;
}
uj5u.com熱心網友回復:
您正在將value
與永遠不相等的物件進行比較,您必須將value
與其進行比較userID
,使用v.userID
as
array.forEach((v) => v.userID === value && count );
1)你可以在這里使用reduce
arr.reduce((acc, curr) => (curr.userID === value ? acc : acc), 0)
const arr = [
{
id: "5ac2f57f-61cf-454b-9457-484b8484c1d3",
userID: "7d21e968-f32a-4cb9-a0db-dd98d1d2973a",
tag: "REPORT_CREATE",
},
{
id: "3d302f03-75da-40cf-8b86-d9673fdc3b4a",
userID: "1dafdb46-a49e-4194-9e5b-9c44be7e4cda",
tag: "REPORT_CREATE",
},
];
function getOccurrence(array, value) {
return arr.reduce((acc, curr) => (curr.userID === value ? acc : acc), 0);
}
console.log(getOccurrence(arr, "1dafdb46-a49e-4194-9e5b-9c44be7e4cda"));
2)您可以使用過濾器作為
arr.filter((o) => o.userID === value).length
const arr = [
{
id: "5ac2f57f-61cf-454b-9457-484b8484c1d3",
userID: "7d21e968-f32a-4cb9-a0db-dd98d1d2973a",
tag: "REPORT_CREATE",
},
{
id: "3d302f03-75da-40cf-8b86-d9673fdc3b4a",
userID: "1dafdb46-a49e-4194-9e5b-9c44be7e4cda",
tag: "REPORT_CREATE",
},
];
function getOccurrence(array, value) {
return arr.filter((o) => o.userID === value).length;
}
console.log(getOccurrence(arr, "1dafdb46-a49e-4194-9e5b-9c44be7e4cda"));
uj5u.com熱心網友回復:
正如其他答案中提到的,您的問題在于將字串值與每個迭代物件進行比較,而不是與物件的相關屬性進行比較。要修復它,您應該簡單地訪問useID
比較中的 。
array.forEach((v) => (v.userID === value && count ));
除此之外,您的方法很好,并且不會像filter().length
快捷方式那樣受到創建新陣列的副作用。
但是將 硬編碼userID
為看起來像實用程式的函式并沒有多大意義,因此您可以property
在函式中接受第三個引數來指定要比較的屬性。這里使用一個for...of
代替forEach()
并檢查是否property
通過,如果不直接比較。
const arr = [{'id': '5ac2f57f-61cf-454b-9457-484b8484c1d3','userID': '7d21e968-f32a-4cb9-a0db-dd98d1d2973a','tag': 'REPORT_CREATE',},{'id': '3d302f03-75da-40cf-8b86-d9673fdc3b4a','userID': '1dafdb46-a49e-4194-9e5b-9c44be7e4cda','tag': 'REPORT_CREATE',},];
function getOccurrence(array, value, prop) {
let count = 0;
for (const v of array) {
(prop !== undefined ? v[prop] : v) === value && count ;
}
return count;
}
const count = getOccurrence(arr, '1dafdb46-a49e-4194-9e5b-9c44be7e4cda', 'userID');
console.log('1dafdb46-a49e-4194-9e5b-9c44be7e4cda: ', count);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/339629.html
標籤:javascript 数组 循环 foreach 频率
上一篇:擲骰子直到得到6