2016-01-27 126 views
0

我在努力比较两个对象数组,并从第一个数组中删除不匹配的对象。比较两个数组并删除不匹配的对象

所有我需要比较对象的两个数组(数组1和数组2)和 除去未从该阵列1

此匹配的对象是我做了什么到现在,但它删除所有项目。

for (var i = 0, len = array1.length; i < len; i++) { 
    for (var j = 0, len2 = array2.length; j < len2; j++) { 
     if (array1[i].Id != array2[j].Student.Id) { 
      array1.splice(j, 1); 
      len= array1; 
     } 
    } 
} 
+2

您可以添加m个将新项目添加到新数组中,如newarray只包含匹配元素 – FMashiro

+1

是否要删除不匹配的对象?该代码似乎删除匹配的对象。另一件事是,它是否从array1中的顶部索引到零索引循环并从数组末尾移除元素。 –

回答

1

如果你遍历array1i = 0, len = array1.length; i < len; i++,但内循环您从array1你怎么想发生在下一循环的入口?

也似乎卸下东西,发现,但你的问题sayd要删除那些。在下面,根据您的评论,我正在删除发现的不是的东西。

在这种情况下,请使用while循环。我还用Array#some(ES5 +)或Array#find(ES2015 +),而不是做一个内部循环:

var i = 0; 
var entry1; 
while (i < array1.length) { 
    entry1 = array1[i]; 
    if (array2.some(function(entry2) { return entry1.Id === entry2.Student.Id; })) { 
     // Found, progress to next 
     ++i; 
    } else { 
     // Not found, remove 
     array1.splice(i, 1); 
    } 
} 

或者,如果它的好来创建一个新的数组,使用filter

array1 = array1.filter(function(entry1) { 
    return array2.some(function(entry2) { return entry1.Id === entry2.Student.Id; })); 
}); 
+0

希望你的意思是array2.some(函数(entry2)是array2 [i] .Student(函数(entry2)。如果我错了,纠正我的错误? – immirza

+0

@immirza:Review Array#some'的文档:[spec](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-array.prototype.some)| [MDN](https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)。基本上,它调用数组中每个条目的函数,传入该条目。如果返回一个真值它会停止,这就是'some'的返回值,如果你不这样做,并且它到达最后,它会返回'false',所以在这种情况下,它基本上是说“如果有任何项匹配” –

+0

@ TJ Crowder感谢它的重复删除工作,但是当我在我的问题中重新更新时,我想从array1中删除NOT MATCHED项目。请问您可以修改您的答案吗? – immirza

0
var array1 = [1,2,3,4,5]; 
var array2 = [3,4]; 
var array3 = array1.filter(i => array2.indexOf(i) !== -1); 

https://jsfiddle.net/pLrr3or5/1/

+2

'filter'不一定是个坏主意,但是OP的代码正在处理对象,'indexOf'不会帮助。 –

+0

是的,对不起,Array.some更适合这里 –

0

你可以做这样的事情:

var array1 = [1,2,3,4]; 
var array2 = [2,4,6,8]; 
var array3 = []; 

for (var i = 0; i < array1.length; i++) { 
    for (var j = 0; j < array2.length; j++) { 
     if (array1[i] === array2[j]) { 
      array3.push(array1[i]);   
     } 
    } 
} 

console.log(array3); 
> [ 2, 4 ] 
0
var Employees= [{name:"Ram",htno:1245},{name:"mohan",htno:1246}, 
{name:"madhu",htno:1247},{name:"ranga",htno:1248}] 

var seletedEmployees= [{name:"mohan"},{name:"ranga"}]; 

var nonmatched = Employees.filter(function(val,index) { 
    return seletedEmployees.map(function(e) { return e.name; }).indexOf(val.name) == -1; 
}); 

console.log(nonmatched); 
相关问题