以下是我的两个数组。
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]);
}
}
filter
,reduce
等都不比基本indexOf
快!UPD
我创建了一个插件:https://plnkr.co/edit/UcOv6SquUgC7Szgfn8Wk?p=preview。他说,对于10000个项目,此解决方案的速度比此处建议的其他2个解决方案快5倍。