我有这些数组:
var first = [
{id: 10, other: '10 - dolor'},
{id: 12, other: '12 - sit'},
{id: 54, other: '54 - from first'}
];
var second = [
{id: 2, other: '2 - lorem'},
{id: 54, other: '54 - from second'},
{id: 80, other: '80 - ipsum'}
];
我如何通过id合并它们,而不重复?如果存在重复,则无需合并该行。我尝试了LoDash,但我无法找到解决方案。
我想得到这个结果:
var first = [
{id: 10, other: '10 - dolor'},
{id: 12, other: '12 - sit'},
{id: 54, other: '54 - from first'},
{id: 2, other: '2 - lorem'},
{id: 80, other: '80 - ipsum'}
];
我需要一个有效的解决方案,因为会有一个巨大的来源。
答案 0 :(得分:2)
我不确定它的性能,但您可以将ID存储在数组中,如果数组不包含id,则将当前对象推送到first
数组中:
var ids = first.map(function (e) {
return e.id;
});
var l = second.length;
for ( var i = 0; i < l; i++ ) {
if (ids.indexOf(second[i].id) === -1) {
first.push(second[i]);
ids.push(second[i].id);
}
}
编辑:旧版浏览器不支持EcmaScript5的Array.prototype.map
,为了支持这些浏览器,您可以使用polyfill或将map
调用替换为简单的for
环。
答案 1 :(得分:1)
这是一个demo 它使用underscore方法。
_(second).each(function(si){
if(!_(first).any(function(fi){ return fi.id == si.id }))
{
first.push(si);
}
});
答案 2 :(得分:0)
您可以尝试jquery externd:
var arr1 = [ 1 ,2 ,3 ];
var arr2 = [ 1 ,2 ,3 ,4 ];
var k = new Array();
$.extend(k,arr1,arr2);
结果: ķ [1,2,3,4]