首页 > 解决方案 > 使用javascript比较多个对象

问题描述

我有一个对象数组(多个对象),并希望将它们与动态添加的对象进行比较。

目前我的代码看起来像

public compare(row) {
    for (var i = 0; i < row.length; i++) {
      var a = row[i];
      console.log(a, 'first array !!!!!!!');

      var b = row[i + 1];
      console.log(b, 'Second array !!!!!!!');

      if (a != undefined && b != undefined) {
        return JSON.stringify(a) === JSON.stringify(b);
      }
      else {
        return false;
      }

    }
  }

但我只能比较前两条记录。有没有办法使用javascript动态比较对象。提前致谢...

标签: javascriptangular

解决方案


您的循环总是在第一个循环结束时返回。如果发现不匹配,您只想在循环内返回 false,否则让循环继续。如果它没有发现任何不匹配,那么你知道你的对象匹配,你可以返回 true。

public compare(row) {
  for (var i = 0; i < row.length - 1; i++) {
    var a = row[i];
    var b = row[i + 1];
    if (!a || !b) {
      continue;
    }

    if (JSON.stringify(a) !== JSON.stringify(b)) {
      return false;
    }
  }

  return true;
}

我还将循环设置为仅继续 while i < row.length - 1,因为row[row.length].

演示

var equal = [
 { a: 1 },
 undefined,
 { a: 1 },
 { a: 1 }
];

var notEqual = [
 { a: 1 },
 undefined,
 { a: 1 },
 { a: 1 },
 { a: 2 }
];

function compare(row) {
  for (var i = 0; i < row.length - 1; i++) {
    var a = row[i];
    var b = row[i + 1];

    if (!a || !b) {
      continue;
    }
    
    if (JSON.stringify(a) !== JSON.stringify(b)) {
      return false;
    }
  }

  return true;
}

console.log('should be true: ', compare(equal));
console.log('should be false: ', compare(notEqual));


推荐阅读