JS合并数组并划分合并值

我有 2 个具有唯一键的数组 name


const 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 函数中添加新属性。我查看了许多类似的问题,但找不到可以帮助我解决这种情况的问题。


蝴蝶刀刀
浏览 192回答 3
3回答

慕神8447489

如果元素的顺序不同。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)

海绵宝宝撒

试试这个:const a3 = [a1, a2].reduce((a, b) =>       a.map((c, i) => Object.assign({result: b[i].pop/c.count}, c, b[i]))     );
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript