[英]How to sum nested array
我有一個這樣的數組
var dataSheet = [
[{price: 200}, {price: 200}, {price: 200}],
[{price: 200}, {price: 200}],
[{price: 200}],
]
我想總結所有的價格和這樣的結果
result = [[600], [400], [200]]
任何幫助將不勝感激,謝謝
您可以使用.map()
和.forEach()
function。
var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ] const res = dataSheet.map(arr => { let sum = 0; arr.forEach(obj => sum += obj.price); return [sum]; }); console.log(res);
嵌套和平面 arrays 的原理相同:只需使用reduce
來獲取數組中值的總和。 在您的情況下,您只需將此機制應用於dataSheet
中的每個嵌套數組並接收新的值數組。 方法map
旨在根據源數組中的值精確創建新數組。
所以正確的答案是使用map
和reduce
的組合。
var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ] var result = dataSheet.map(data => data.reduce((acc, obj) => acc += obj.price,0)); console.log(result); // [600, 400, 200]
如果你真的需要有類似[[600],[400],[200]]
的結果(嵌入 arrays 而不僅僅是值,你只需要將返回值包裝在[]
中,如下所示:
var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ] var result = dataSheet.map(data => [data.reduce((acc, obj) => acc += obj.price,0)]); console.log(result); // [[600], [400], [200]]
我猜map
+ reduce
是你要找的:)
const res = dataSheet.map(el => el.reduce((acc, curr) => acc + curr.price, 0));
或者flatMap
如果您需要 [600, 400, 200] 的結果:
const res = dataSheet.flatMap(el => el.reduce((acc, curr) => acc + curr.price, 0));
使用map
, reduce
和解構。
var dataSheet = [ [{ price: 200 }, { price: 200 }, { price: 200 }], [{ price: 200 }, { price: 200 }], [{ price: 200 }], ]; const result = dataSheet.map((arr) => Object.values( arr.reduce(({ price: acc }, { price }) => ({ price: acc + price })) ) ); console.log(result)
var dataSheet = [ [{price: 200}, {price: 200}, {price: 200}], [{price: 200}, {price: 200}], [{price: 200}], ]; var res = dataSheet.reduce((result, row) => result.concat([[row.reduce((sum, element) => sum + element.price, 0)]]), []); console.log(res);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.