我有一個物件,其中有一個物件,每個物件都有一個包含 0..n 個物件的物件陣列。主要物件看起來像這樣:
{
obj1: [{obj1.1}, {obj1.2}, {obj1.3}],
obj2: [{obj2.1}]
obj3: [{obj3.1}, {obj3.2}]
}
每個物件(obj1、obj2 和 obj3)在物件陣列中保存一組公共物件。例如,obj1 在物件陣列(obj1.1、obj1.2 和 obj1.3)中有一組物件,所有這些物件都具有將它們組合在一起的共同屬性。
我現在希望能夠在每個物件陣列中分別迭代每個物件,以便對每個物件陣列的特定屬性(每個物件具有)求和。
我曾經Object.keys迭代過每個物件陣列,盡管我仍然無法獲得每個物件陣列的單獨總和值。
例如:
{
obj1: [
0: { price: 10 }
1: { price: 10 }
2: { price: 10 }
],
obj2: [
0: { price: 10 }
],
obj3: [
0: { price: 10 }
1: { price: 10 }
]
}
我希望能夠price對每個單獨的物件陣列的屬性求和。因此,對于obj1我來說,總和應該是 30。對于obj2我來說,總和應該是 10,最后對于obj3我來說,總和應該是 20。
我可以使用 迭代每個物件陣列Object.keys,但是就目前而言,當迭代每個物件陣列中的每個單獨元素時(使用 foreach),我只是將所有三個物件陣列中所有物件的最終數量相加。即,我得到的總和為 60。
var total = 0;
for (var key of Object.keys(result)) {
result[key].forEach(element => {
total = element.Price;
});
};
console.log(total);
我可以用什么來獲得每個物件陣列的三個單獨的總和?
uj5u.com熱心網友回復:
function sum(prices)
{
let total = 0;
prices.forEach((entry) => total = entry.price);
return total;
}
console.log(sum(obj1));
console.log(sum(obj2));
console.log(sum(obj3));
怎么又這么難了?你有正確的代碼,只需要打破一切。
uj5u.com熱心網友回復:
- 使用
Object#entries, 獲取鍵陣列對 - 使用
Array#reduce, 遍歷這個串列 - 在每次迭代中,使用
Array#reduce,您可以計算總價并將其保存為當前鍵的值
const data = {
obj1: [ { price: 10 }, { price: 10 }, { price: 10 } ],
obj2: [ { price: 10 } ],
obj3: [ { price: 10 }, { price: 10 } ]
};
const res = Object.entries(data).reduce((totalMap, [key, arr]) => ({
...totalMap,
[key]: arr.reduce((total, { price }) => total price, 0)
}), {});
console.log(res);
uj5u.com熱心網友回復:
還有另一種將結果作為陣列獲取的方法:
let obj={obj1:[{price:10},{price:10},{price:10}],obj2:[{price:10}],obj3:[{price:10},{price:10}]};
let result = Object.entries(obj)
.map(([k,v]) => ( {[k]:v.reduce((acc,e) => acc =e.price ,0)} ) )
console.log(result)
uj5u.com熱心網友回復:
您可以將任務分開,一個用于獲取某個鍵的總值,另一個用于迭代物件的鍵。
const
getTotal = (array, key) => array.reduce((t, o) => t o[key], 0),
data = { obj1: [{ price: 10 }, { price: 10 }, { price: 10 }], obj2: [{ price: 10 }], obj3: [{ price: 10 }, { price: 10 }] },
result = {};
for (const key in data) result[key] = getTotal(data[key], 'price');
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/492520.html
標籤:javascript 数组 目的
