【问题标题】:How to merge two array value matching by key value using Node.js/JavaScript如何使用 Node.js/JavaScript 合并两个按键值匹配的数组值
【发布时间】:2018-02-01 18:39:18
【问题描述】:

我需要匹配两个数组并通过使用 JavaScript/Node.js 匹配键值进行合并。这是我的代码:

var userData=[{'email':'a@gmail.com','name':'Raj'},{'email':'b@gmail.com','name':'Rahul'}];
var userData1=[{'email':'a@gmail.com','address':'abcdf'},{'email':'b@gmail.com','address':'bbsr'}];

这里我有两个数组,我需要通过匹配 email 值来合并两个数组,预期的输出如下所示。

var finalArr=[{'email':'a@gmail.com','name':'Raj','address':'abcdf'},{'email':'b@gmail.com','name':'Rahul','address':'bbsr'}];

【问题讨论】:

标签: javascript arrays node.js


【解决方案1】:
var finalArr = [];
userData.map(item => {
  userData1.map(item1 => {
    if (item.email === item1.email) {
      finalArr.push(Object.assign(item, item1));
    }
  })
})

没那么难,下次你自己想想吧。

【讨论】:

  • if (item.email === item1.emal) {...}
  • 您误用了.map() 方法。如果您只想迭代使用.forEach()。如果您确实想要映射,请使用.map() 并确保您的回调返回一个值,并且使用来自.map() 的返回值。
  • @nnnnnn - 有一些基准测试表明 .map 明显快于 .forEach - 这就是为什么这么多代码示例滥用 .map
  • @JaromandaX - 真的吗?这很奇怪。即使嵌套的.map() 创建了一堆被丢弃的数组?无论哪种方式,它都会使代码更难阅读。
  • 如果您查看jsperf.com/native-map-versus-array-looping/24 - 那么您可以看到使用.map 来实现.forEach 的功能,.forEach 在 Chrome 中的速度是 Chrome 的两倍,在 Firefox 中的速度几乎是 10 倍 - 它没有当您阅读 numpty 时会说诸如“我建议始终使用地图”之类的内容,就像这个 numpty 过去所做的那样 - ryanpcmcquen.org/javascript/2015/10/25/…
【解决方案2】:

你可以使用underscore来做到这一点

var mergedArray = _.map(userData, function(element){
    let findItem = _.findWhere(userData1, {email: element.email})
    return _.extend(element, findItem);
});

您可以查看fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 2018-06-17
    • 2017-11-26
    • 2017-02-11
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多