为了账号安全,请及时绑定邮箱和手机立即绑定

如何沿索引添加多个数组中的对象

如何沿索引添加多个数组中的对象

偶然的你 2022-10-13 19:23:11
我有一个对象数组[  [{data:1},{data:2},{data:3}],  [{data:1},{data:2},{data:3}],  [{data:1},{data:2},{data:3}]]我需要[{data:3},{data:6},{data:9}]通过加法减少。添加索引 0 的对象,添加索引 1 的对象,以及添加索引 2 的对象。有没有像reduce这样的Javascript函数可以管理这个?
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

前面的答案很好,但只有当你的数组总是相同的大小时它才有效。


例如,有这个初始输入会破坏代码:


[

  [{data:1},{data:2},{data:3}, {data:4}],

  [{data:1},{data:2},{data:3}],

  [{data:1},{data:2},{data:3}]

]

要解决这个问题,您可以在 reducer 中添加一个检查,以确保下一个数组在该索引处有一个对象。


另一个问题是如果你有这个初始输入:


[

  [{data:1},{data:2},{data:3}, {data:4}],

  [{data:1},{data:2},{data:3}, {data:4}, {data:5}],

  [{data:1},{data:2},{data:3}]

]

第二个数组中的最后一个对象将被忽略,因为初始 reducer 只考虑length第一个数组的。


要处理这些异常,您可以使用此重构代码(基于@mickl 答案):


// Initial input with different format

const initialInput = [

  [{data:1},{data:2},{data:3}, {data:4}],

  [{data:1},{data:2},{data:3}, {data:4}, {data:5}],

  [{data:1},{data:2},{data:3}]

];


// Sort and reverse to get the array with most items first

const sortedInput = initialInput.sort().reverse();


// Finally use the refactored reducer

const result = sortedInput.reduce((arr,cur) => {

  return arr.map((val, i) => {

    // This "if" checks if the next array has an item on the same index of previous array

    // Which is not the case, for example, from the second to the third item

    if (cur[i] && cur[i].data) {

      return { data: val.data + cur[i].data }

    } else {

      return { data: val.data}

    }

  })

});


console.log(result)


查看完整回答
反对 回复 2022-10-13
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以使用array.reduce跨多个数组聚合数据array.map并对值求和,因为它采用箭头函数,其中第二个参数表示当前处理元素的索引:


let input = [

  [{data:1},{data:2},{data:3}],

  [{data:1},{data:2},{data:3}],

  [{data:1},{data:2},{data:3}]

];


let result = input.reduce((arr,cur) => 

                           arr.map((val, i) => ({ data: val.data + cur[i].data })));


console.log(result);


查看完整回答
反对 回复 2022-10-13
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信