比较两个数组并删除不匹配的对象

时间:2016-01-27 10:59:34

标签: javascript

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

  

我需要比较两个对象的数组(array1和array2)和   从数组1中删除NOT MATCHED对象。

这是我到目前为止所做的事情,但它删除了所有项目。

@Override
public void onPolylineClick(Polyline polyline) {
     ....
}

5 个答案:

答案 0 :(得分:1)

如果您使用array1循环i = 0, len = array1.length; i < len; i++,但循环中的,则会从array1中删除一个条目您认为发生了什么下一个循环?

您似乎也删除了 找到的内容,但您的问题是说您要删除那些的内容。在下面,根据您的评论,我删除了未找到的内容。

在这种情况下,请使用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; }));
});

答案 1 :(得分: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 :(得分: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 ]

答案 3 :(得分: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);

答案 4 :(得分:0)

2021

  const a1 = {a:1,b:2,c:3}
  const a2 = {a:1,b:2,c:4,d:6}
  const r = {}
  
  for(const k2 in a2){
    for(const k1 in a1){
      if(k1 === k2){
        r[k1] = a2[k1]
      }
    }
  } 

  console.log(r) // {a: 1, b: 2, c: 4}

在我看来,这些 for 循环运行得又快又干净。 似乎是处理对象数组的最简洁的方式。