for循环无法在数组中找到对象

时间:2015-10-18 05:38:40

标签: javascript arrays

我正在尝试在数组中找到完全匹配。我的数组array包含一个对象,并且存储在example中的完全匹配。当我遍历array数组时,它会越过它。我在使用更大的阵列时发现了这一点,但是为了某种“概念证明”而将其分解为1/1关系。我觉得答案很简单,盯着我,但我没有看到。救救我。

'use strict';

var array = [ { foo: 'hello', bar: 'foo' } ];

var example = { foo: 'hello', bar: 'foo' };

for (var i = 0; i < array.length; i++) {
  if ( array[i] === example ) {
    console.log(array[i]);
  }
}

2 个答案:

答案 0 :(得分:0)

您可以像这样比较对象:

JSON.stringify(obj1) === JSON.stringify(obj2) 

在你的情况下,你会寻找:

var array = [ { foo: 'hello', bar: 'foo' } ];
var example = { foo: 'hello', bar: 'foo' };

for (var i = 0; i < array.length; i++) {
    if ( JSON.stringify(array[i]) === JSON.stringify(example) ) {
        console.log(array[i]);
    }
}

您无法按照您的方式比较对象,因为您正在比较实例。

我应该注意,这种比较对象的方式非常有限,只有当属性共享相同的顺序,并且不包含函数等时才有效。您可以对属性顺序进行排序,或者将更深层次的等同性与任何流行顺序进行比较可在此处找到的解决方案:Object comparison in JavaScript

答案 1 :(得分:0)

考虑使用_.isEqualunderscore.js

等常用(几乎标准替代本机)实用程序库中的for (var i = 0; i < array.length; i++) { if ( _.isEqual(array[i], example) ) { console.log(array[i]); } }
fruits