сравнивать 2 массива объектов совпадает независимо от его индексов в lodash? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть этот массив объектов, которые я хочу сравнить:

const arr1 = [{a:'first', b:'second'}, {c:'third', d: 'fourth'}, {e:'fifth', f: 'sixth'}];
const arr2 = [{c:'third', d: 'fourth'},  {e:'fifth', f: 'sixth'}, {a:'first', b:'second'}];

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

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

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

const arr1 = [{a:'first', b:'second'}, {e:'fifth', f: 'sixth'}, {c:'third', d: 'fourth'}];
const arr2 = [{c:'third', d: 'fourth'},  {e:'fifth', f: 'sixth'}, {a:'first', b:'second'}];


let match = JSON.stringify(arr1.sort((x, y) => {
              return Object.keys(x)[0] > Object.keys(y)[0]})) 
         === 
         JSON.stringify(arr2.sort((x, y) => {
           return Object.keys(x)[0] > Object.keys(y)[0]}))
console.log(match)

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

0 голосов
/ 28 мая 2018

Можно просто сравнить каждый элемент stringify ed, таким образом, это просто every, за которым следует .includes, библиотека не требуется:

const arrsMatch = (arr1, arr2) => {
  const arr2Strings = arr2.map(JSON.stringify);
  return arr1.every(item => arr2Strings.includes(JSON.stringify(item)));
};
console.log(arrsMatch(
  [{a:'first', b:'second'}, {c:'third', d: 'fourth'}, {e:'fifth', f: 'sixth'}],
  [{c:'third', d: 'fourth'},  {e:'fifth', f: 'sixth'}, {a:'first', b:'second'}],
));
console.log(arrsMatch(
  [{a:'DOESNT-MATCH', b:'second'}, {c:'third', d: 'fourth'}, {e:'fifth', f: 'sixth'}],
  [{c:'third', d: 'fourth'},  {e:'fifth', f: 'sixth'}, {a:'first', b:'second'}],
));
...