2014-10-16 6 views
0

У меня есть массив объектов.Сравнить объекты в массиве

var array = [obj1, obj2, obj3, objN] 

все объекты имеют 3 свойства ключ, название, описание.

Как сравнить эти объекты для равенства, два объекта равны, если они имеют один и тот же ключ.

Но если они позволяют сказать 4 объекта, все они должны иметь одинаковый ключ равным.

+0

я думал, принимая первый объект и сравнение с другие объекты, но он не чувствует себя хорошо. – john

+0

Похоже, вы хорошо понимаете концепцию, так что в чем проблема? Просто напишите код для процесса, который вы начертили ... – CodingIntrigue

+0

Сравнение всех объектов с первым объектом - это путь. – Cerbrus

ответ

7

Вы можете сделать это с помощью Array.prototype.every():

В every() метод проверяет, является ли все элементы в массиве пройти тест, реализованный при условии функции. (mdn)

Пример:

var array = [obj1, obj2, obj3, objN]; 
var allTheSame = array.every(function(element){ 
    return element.key === array[0].key; 
}); 

Пожалуйста, обратите внимание, что Array.prototype.every() является IE 9+. Тем не менее, есть хороший polyfill on the mdn page для более старых версий IE.

Если вы действительно хотите использовать для петли, вы могли бы сделать это следующим образом:

var array = [obj1, obj2, obj3, objN]; 
var allTheSame = array.length == 1; 

for(var i = 1; i < array.length && (array.length > 1 && allTheSame); i++){ 
    allTheSame = array[0].key == array[i].key; 
} 

Попробуйте для:

[{key:1},{key:1},{key:1}]; // true 
[{key:1},{key:1},{key:2}]; // false 
[{key:1},{key:2},{key:1}]; // false 
[{key:1}]; // true 
+0

thanx, я приму этот ответ. – john

+0

Большое спасибо, @john :-) – Cerbrus

+0

@Cerbrus, если это случай, то вы правы :-) – Zeeshan

-3
var array = [obj1, obj2, obj3, objN]; 
for(i = 0, i < array.length; i++){ 
    for(j = i + 1; j < array.length; j++){ 
     if(array[i].key == array[j].key){ 
      // Your logic whatever you want to do here. 
     } 
    } 
} 
+0

Почему вы вложили петли 'for'? o.O – Cerbrus

+0

@Cerbrus Итак, я могу сравнить выбор индекса с остальными объектами в массиве. Таким образом, мне не нужно возвращаться к первому индексу каждый раз, когда я перехожу к следующему индексу. Оно работает. Скопируйте код и проверьте консоль. вам просто нужно передать фактические объекты в массив – Zeeshan

+2

Это много избыточной проверки. Если вы сравниваете первый объект с _all_ другими объектами в массиве, и они все совпадают с первыми, зачем вам повторять одну и ту же проверку для второго объекта? – Cerbrus

Смежные вопросы