簡體   English   中英

比較兩個數組並刪除不匹配的對象

[英]compare two arrays and remove not matched objects

我正在努力比較兩個對象數組並從第一個數組中刪除不匹配的對象。

我只需要比較兩個對象數組(array1 和 array2)並從數組 1 中刪除 NOT MATCHED 對象。

這是我到目前為止所做的,但它刪除了所有項目。

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;
        }
    }
}

如果您使用i = 0, len = array1.length; i < len; i++遍歷array1 i = 0, len = array1.length; i < len; i++ i = 0, len = array1.length; i < len; i++ i = 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; }));
});
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/

你可以這樣做:

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 ]
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);

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 循環運行得又快又干凈。 似乎是處理對象數組的最干凈的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM