[英]Filtering array with objects inside an object
我有一個使用嵌套對象過濾數組的問題。
[{
"firstName": "Kevin",
"lastName": "Smith",
"expenses": {
"drink1": 25,
"drink2": 20
}
},
{
"firstName": "John",
"lastName": "Rambo",
"expenses": {
"coffe": 10,
"cake": 20
}
}
]
我想得到所有費用總和> 35的物品。如何獲得內部expenses
? 或者過濾器在這里可能不合適。
只需filter
它,使用reduce
的條件來計算費用! 挺直的:)
const input = [{ "firstName": "Kevin", "lastName": "Smith", "expenses": { "drink1": 26, "drink2": 20 } }, { "firstName": "John", "lastName": "Rambo", "expenses": { "coffe": 10, "cake": 20 } } ]; const output = input.filter(user => Object.values(user.expenses).reduce((acc, expense) => acc + expense) > 45); console.log(output);
你可以嘗試這樣的事情
var data = [{ "firstName": "Kevin", "lastName": "Smith", "expenses": { "drink1": 25, "drink2": 20 } }, { "firstName": "John", "lastName": "Rambo", "expenses": { "coffe": 10, "cake": 20 } } ] var filtered = data.filter(c => Object.keys(c.expenses) .reduce(function(p, e) { return p + c.expenses[e] }, 0) >= 35 ); console.log(filtered);
您可以使用表達式arr[i]
訪問數組arr
中索引i
處的對象。您需要做的是遍歷數組。 在你的循環中你用我提到的表達式訪問每個對象: arr[i]
然后在這個對象上你可以按照arr[i].expenses
之后的方式訪問費用。在此之后 - 如果我正確理解你總結你的arr[i].expenses
內容arr[i].expenses
object並選擇那些滿足你條件的對象。 請看下面的代碼:
var expensesAbove35Arr = [];
var yourArray = [
{
"firstName": "Kevin",
"lastName": "Smith",
"expenses": {
"drink1": 26,
"drink2": 20
}
},
{
"firstName": "John",
"lastName": "Rambo",
"expenses": {
"coffe": 10,
"cake": 20
}
}
];
for(var i=0; i<yourArray.length; i++){
if(yourArray[i].expenses.coffe + yourArray[i].expenses.cake > 35 ){
expensesAbove35Arr.push(yourArray[i]);
}
}
你已經在數組expensesAbove35Arr
得到了你的結果
我假設您需要保持用戶數量的方式,但過濾費用。
(我在評論中指出錯誤,保留這個答案以防萬一有人看到它的任何價值)
可能這可以選擇或簡化,但在這里:
arr.reduce((acc, user) => [...acc,
Object.keys(user).reduce((userResult, key) => {
if (key === 'expenses') {
return {
...userResult,
expenses: Object.entries(elem.expenses)
.filter(([product, value]) => value > 35)
// now "reversing" the object.entries
.reduce((acc, [product, value]) => ({ [product]: value }), {})
}
}
return {
...userResult,
[key]: elem[key]
}
}, user) // starts with the user
], []) //starts with empty array
可能的解決方案可能是:
arr.filter(function(v){ for(expense in v.expenses){ if(v.expenses[expense] > 10){ return true; }else{ return false; } } })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.