如何使用 Node.js/JavaScript 合并两个按键值匹配的数组值

Posted

技术标签:

【中文标题】如何使用 Node.js/JavaScript 合并两个按键值匹配的数组值【英文标题】:How to merge two array value matching by key value using 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'];

【问题讨论】:

How to merge two arrays in Javascript and de-duplicate items的可能重复 如果其中一个数组中有一个条目而另一个数组中没有对应的条目会发生什么? 【参考方案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

【讨论】:

以上是关于如何使用 Node.js/JavaScript 合并两个按键值匹配的数组值的主要内容,如果未能解决你的问题,请参考以下文章

检测代码中的 node.js/javascript 内存泄漏

如何在不使用 Visual Studio 作为先决条件的情况下使用 node js javascript 连接到 oracle 数据库

markdown [Koa路由]如何管道koa步骤和路由器#koa #koarouter#node.js #javascript

使用 Javascript/Node.js 在代码中执行 mongoimport

Node.js / Javascript 多重递归承诺在视图中返回

Node.js JavaScript 字符串化