Массивы JavaScript - Проверка двух массивов объектов для того же содержания, игнорируя порядок

У меня есть два массива JavaScript (A и B) это содержит объекты, которые я создал. Я хочу проверить что все объекты в массив A содержатся в массиве B, но не обязательно в том же порядке.

Что лучший способ состоит в том, чтобы сделать это?

Править:

Они - все фактические объекты, не примитивы, таким образом, я должен буду сравнить их содержание и структуру также (возможно, использующий что-то как JSON.stringify).

Я хочу сделать это, потому что я изучаю Разработку через тестирование, и я хочу протестировать функции, которые возвращают списки объектов. Я должен протестировать, имеют ли возвращенные списки ожидаемые объекты в них, или не (порядок не имеет значения в этом случае).

13
задан Brock Adams 14 July 2010 в 04:05
поделиться

2 ответа

Использование: isEqArrays(arr1, arr2)

//
// Array comparsion
//

function inArray(array, el) {
  for ( var i = array.length; i--; ) {
    if ( array[i] === el ) return true;
  }
  return false;
}

function isEqArrays(arr1, arr2) {
  if ( arr1.length !== arr2.length ) {
    return false;
  }
  for ( var i = arr1.length; i--; ) {
    if ( !inArray( arr2, arr1[i] ) ) {
      return false;
    }
  }
  return true;
}
2
ответ дан 2 December 2019 в 01:49
поделиться

Это, вероятно, самый простой метод, если не самый медленный.

var o = { PropA: 1, PropB: 2 };
var a = [1, 2, 3, 4, o];
var b = [2, 3, 4, 1];

var c = a.filter(function(value, index, obj) {
    return b.indexOf(value) > -1;
});

if (c.length !== a.length) {
    throw new Error("Array b is missing some elements!");
}

indexOf проверяет только то, что они ссылаются на один и тот же объект. Если вы хотите проверить эквивалентность значений, вам придется провести глубокое сравнение свойств или использовать JSON.stringify , как вы упомянули в своем вопросе.

1
ответ дан 2 December 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: