Сравнение двух массивов с объектами с неупорядоченными ключами - PullRequest
0 голосов
/ 04 февраля 2020

Я знаю, что это несколько вопросов, которые указывают, как это сделать, однако, когда ключи объектов находятся в другом порядке, предоставляемые решения не работают.

let array1 = [
  { name: 'David', age: 30 },
  { name: 'Amy', age: 39 }
];

let array2 = [
  { age: 30, name: 'David' },
  { age: 39, name: 'Amy' }
];

Сравнение массивы

console.log(array1.every((value, index) => {
   return JSON.stringify(value) === JSON.stringify(array2[index]);
})

// Returns false
// Expected true

Понятно, что эти два массива отличаются , но данные одинаковы. Итак ...

Как сравнить массивы с объектами, в которых я не могу гарантировать, что ключи упорядочены одинаково?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Вы можете сделать правильное сравнение объектов, есть множество способов сделать это.

Вот один из примеров:

let array1 = [
  { name: 'David', age: 30 },
  { name: 'Amy', age: 39 }
];

let array2 = [
  { age: 30, name: 'David' },
  { age: 39, name: 'Amy' }
];

console.log(array1.every((value, index) => 
  Object.keys(value).length === Object.keys(array2[index]).length &&
  JSON.stringify(value) === JSON.stringify({...value, ...array2[index]})
));
0 голосов
/ 04 февраля 2020

1) Преобразование массива объектов в массив строк
2) Сравнение обоих массивов строк (один из способов сделать с помощью Reduce, как показано ниже).

let array1 = [
  { name: "David", age: 30 },
  { name: "Amy", age: 39 }
];

let array2 = [
  { age: 30, name: "David" },
  { age: 39, name: "Amy" }
];


const isEqual = (arr1, arr2) => {
  if (arr1.length !== arr2.length) {
    return false;
  }
  const toStr = ({ name, age }) => `${name}-${age}`;
  const a1 = Array.from(arr1, toStr);
  const a2 = Array.from(arr2, toStr);
  return a1.every(item => a2.includes(item));
};

console.log(isEqual(array1, array2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...