我只是想找到一个好方法:
我有2个阵列:
var allItems = [
{'id' : '1', 'title' : 'Title 1' },
{'id' : '2', 'title' : 'Title 2' },
{'id' : '3', 'title' : 'Title 3' },
{'id' : '4', 'title' : 'Title 4' },
{'id' : '5', 'title' : 'Title 5'},
{'id' : '6', 'title' : 'Title 6' }
];
var idsToExtract = ['1', '3', '6'];
我正在寻找两个看起来像这样的数组的结果:
var array1 = [
{'id' : '1', 'title' : 'Title 1' },
{'id' : '3', 'title' : 'Title 3' },
{'id' : '6', 'title' : 'Title 6'}
];
var array2 = [
{'id' : '2', 'title' : 'Title 2' },
{'id' : '4', 'title' : 'Title 4' },
{'id' : '5', 'title' : 'Title 5'}
];
我只使用原生JS(ES2015)数组方法。(map / filter等)。
没有jquery / undercore等。
谢谢!
答案 0 :(得分:3)
Array.prototype.filter()
method可以为您提供帮助:
var allItems = [
{'id' : '1', 'title' : 'Title 1' },
{'id' : '2', 'title' : 'Title 2' },
{'id' : '3', 'title' : 'Title 3' },
{'id' : '4', 'title' : 'Title 4' },
{'id' : '5', 'title' : 'Title 5'},
{'id' : '6', 'title' : 'Title 6' }
];
var idsToExtract = ['1', '3', '6'];
var array1 = allItems.filter(function(item) {
return idsToExtract.indexOf(item.id) !== -1;
});
var array2 = allItems.filter(function(item) {
return idsToExtract.indexOf(item.id) === -1;
});
当然你可以使用Array.prototype.foreach()
method,并在一个迭代周期中创建2个数组:
var allItems = [
{'id' : '1', 'title' : 'Title 1' },
{'id' : '2', 'title' : 'Title 2' },
{'id' : '3', 'title' : 'Title 3' },
{'id' : '4', 'title' : 'Title 4' },
{'id' : '5', 'title' : 'Title 5'},
{'id' : '6', 'title' : 'Title 6' }
];
var idsToExtract = ['1', '3', '6'],
array1 = [],
array2 = [];
allItems.forEach(function(item) {
idsToExtract.indexOf(item.id) !== -1 ? array1.push(item) : array2.push(item);
});
答案 1 :(得分:1)
var array1 = allItems.filter((x) => idsToExtract.includes(x.id));
var array2 = allItems.filter((x) => !idsToExtract.includes(x.id));
JSFiddle:https://jsfiddle.net/ykcdvp9v/1/
答案 2 :(得分:0)
使用简单的for循环
var allItems = [
{'id' : '1', 'title' : 'Title 1' },
{'id' : '2', 'title' : 'Title 2' },
{'id' : '3', 'title' : 'Title 3' },
{'id' : '4', 'title' : 'Title 4' },
{'id' : '5', 'title' : 'Title 5'},
{'id' : '6', 'title' : 'Title 6' }
];
var idsToExtract = ['1', '3', '6'],
var remainingItemsArray= [];
var extractedItemsArray= [];
for(var i=0;i<allItems.length;i++){
var item = allItems[i];
if(idsToExtract.indexOf(item.id) != -1){
remainingItemsArray.push(item);
}else{
extractedItemsArray.push(item);
}
}