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

JS合并数组并划分合并值

JS合并数组并划分合并值

蝴蝶刀刀 2021-05-31 09:01:48
我有 2 个具有唯一键的数组 nameconst a1 = [     {        "name":"foo",      "count":5,   },   {        "name":"bar",      "count":0,   }]const a2 = [     {        "name":"foo",      "pop":58,   },   {        "name":"bar",      "pop":22,   }]然后我需要创建a3具有的性质a1和a2以及一第三属性result,它等于pop/count我已经能够在这里合并 2 个数组:  const a3 = [a1, a2].reduce((a, b) =>    a.map((c, i) => Object.assign({}, c, b[i]))  );我的预期结果是a3 = [     {        "name":"foo",      "count":5,      "pop":58,      "result": 11.6   },   {        "name":"bar",      "count":0,      "pop":22,      "result": infinity   }]但是,我一直在尝试在这个 reduce 函数中添加新属性。我查看了许多类似的问题,但找不到可以帮助我解决这种情况的问题。
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

如果元素的顺序不同。


const a1 = [  

    {  

         "name":"foo",

         "count":5,

    },

    {  

         "name":"bar",

         "count":0,

    }

]

const a2 = [  

    {  

         "name":"foo",

         "pop":58,

    },

    {  

         "name":"bar",

         "pop":22,

    }

]


let out = a1.map(e => {

    let {pop} = a2.find(({name}) => name = e.name);

    return {...e, pop, result: isFinite(pop/e.count)? pop/e.count : 0}

});

console.log(out)

如果元素的顺序相同


const a1 = [  

    {  

         "name":"foo",

         "count":5,

    },

    {  

         "name":"bar",

         "count":0,

    }

]

const a2 = [  

    {  

         "name":"foo",

         "pop":58,

    },

    {  

         "name":"bar",

         "pop":22,

    }

]


let out = a1.map((e, i) => {

    let {pop} = a2[i];

    return {...e, pop, result: isFinite(pop/e.count)? pop/e.count : 0}

});

console.log(out)


查看完整回答
反对 回复 2021-06-03
?
海绵宝宝撒

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

试试这个:


const a3 = [a1, a2].reduce((a, b) =>

       a.map((c, i) => Object.assign({result: b[i].pop/c.count}, c, b[i]))

     );


查看完整回答
反对 回复 2021-06-03
  • 3 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

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