以下是我的两个数组。

let clientCollection = ["1","ABC","X12","OE2","PQ$"];



let serverCollection = [{
    "Id": "1",
    "Name": "Ram",
    "Other": "Other properties"

},
{
    "Id": "ABC",
    "Name": "Shyam",
    "Other": "Other properties"

},
{
    "Id": "OE2",
    "Name": "Mohan",
    "Other": "Other properties"

}]

现在我需要比较上面的两个集合并创建两个子数组
let matchedIds = [];

let unMatchedIds = [];

现在这就是我目前正在做的。
for(let i =0 ; i < clientsCollection.length;i++)
{
    if(_.indexOf(serverCollection, clientCollection[i]) >= 0)
    {
          matchedIds.push(clientCollection[i]);
    }
    else
    {
        unMatchedIds.push(clientCollection[i]);
    }
}

在我的应用程序中,这些数组的大小可以增加到1000或更大。这可能是功效问题

我正在使用下划线并尝试是否可以获得更好的解决方案,但找不到。

有人可以建议我是否可以使用下划线+ ES6 来以更有效的方式进行相同的操作?

最佳答案

我认为,这将是matchedIds人口的好方法:

for(let i = serverCollection.length - 1; i >= 0; i--) {
  const id = serverCollection[i]['Id'];
  if(clientCollection.indexOf(id) !== -1) {
    matchedIds.push(id);
  }
}

这是unMatchedIds完成后用于matchedIds的代码:
for (var i = clientCollection.length - 1; i >= 0; i--) {
  if (matchedIds.indexOf(clientCollection[i]) === -1) {
    unMatchedIds.push(clientCollection[i]);
  }
}
filterreduce等都不比基本indexOf快!

UPD
我创建了一个插件:https://plnkr.co/edit/UcOv6SquUgC7Szgfn8Wk?p=preview。他说,对于10000个项目,此解决方案的速度比此处建议的其他2个解决方案快5倍。

07-24 09:18