簡體   English   中英

遍歷 JS 中的對象數組

[英]Iterate over an object array in JS

我有以下對象:

obj = [
    { 1: 20, 2: 26, 3: 14},
    { 1: 12, 2: 25, 3: 15},
    { 1: 14, 2: 13, 3: 19},
    { 1: 16, 2: 32, 3: 21}
]

我想將每個位置乘以 2,然后將它們添加到每個位置,讓我解釋一下:我將每個值乘以 2,這是部分結果:

obj = [
    { 1: 40, 2: 52, 3: 28},
    { 1: 24, 2: 50, 3: 30},
    { 1: 28, 2: 26, 3: 38},
    { 1: 32, 2: 72, 3: 42}
]

然后我必須添加每個鍵並通過在初始對象內的末尾添加一個新數組來添加總數,這應該是最終結果:

obj = [
    { 1: 20, 2: 26, 3: 14},
    { 1: 12, 2: 25, 3: 15},
    { 1: 14, 2: 13, 3: 19},
    { 1: 16, 2: 32, 3: 21},
    { 1: 104, 2: 200, 3: 138}
]
  • 使用 map 迭代每個數組對象(行)。
  • 然后對於該行中的每個鍵,使用 reduce 將其乘以 2,最后返回該行(包含 2 乘法的結果)
  • 在將每行乘以 2 的同時,我們還計算每行的 key*2 的總和。
  • 將 sumRow 推送到原始對象

 let obj = [ { 1: 20, 2: 26, 3: 14}, { 1: 12, 2: 25, 3: 15}, { 1: 14, 2: 13, 3: 19}, { 1: 16, 2: 32, 3: 21} ] let sumRow = {} let partialRes = obj.map(row => Object.keys(row).reduce((acc, key) => { acc[key] = row[key] * 2 sumRow[key] = sumRow[key] ? sumRow[key] + acc[key] : acc[key] return acc }, {})) obj.push(sumRow) console.log(obj)

使用Object.keys可以獲得對象的所有鍵,使用Array.prototype.forEach可以循環鍵並進行如下操作。

 const input = [ { 1: 20, 2: 26, 3: 14}, { 1: 12, 2: 25, 3: 15}, { 1: 14, 2: 13, 3: 19}, { 1: 16, 2: 32, 3: 21} ]; const sumObj = {}; input.forEach((item) => { Object.keys(item).forEach((key) => { item[key] *= 2; sumObj[key] ? sumObj[key] += item[key] : sumObj[key] = item[key]; }); }); input.push(sumObj); console.log(input);

您可以使用Array.prototype.reduce()並將結果推送到原始數組中(或以其他方式添加)

 obj = [ { 1: 20, 2: 26, 3: 14}, { 1: 12, 2: 25, 3: 15}, { 1: 14, 2: 13, 3: 19}, { 1: 16, 2: 32, 3: 21} ] console.log(obj); obj.push(obj.reduce((acc, val) => ({ 1: acc[1] + val[1] * 2, 2: acc[2] + val[2] * 2, 3: acc[3] + val[3] * 2 }), {1: 0, 2: 0, 3: 0})); console.log(obj);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM