Сравните два объекта с одним и тем же свойством, но они смешиваются вместе, не следуя правилу алфавита - PullRequest
3 голосов
/ 05 апреля 2019

В случае, если у меня есть два объекта:

const a = {
   sample: 'this is sample',
   errorMessage: 'status is error'
}

const b = {
   errorMessage: 'status is error'
   sample: 'this is sample',
}

Я знаю, как отсортировать свойство по ключам сортировки объекта, но не знает, как разобрать это в объект.

Пример:

const sortA = JSON.stringify(Object.keys(a).sort) 
const sortB = JSON.stringify(Object.keys(b).sort)

expected(sortA).toEquals(sortB)

Ответы [ 3 ]

2 голосов
/ 05 апреля 2019

Вы можете взять записи объекта, отсортировать по ключу, получить JSON и сравнить строки.

Работает только для не вложенных объектов.

const
    sortBy = k => (a, b) => a[k].localeCompare(b[k]),
    a = { sample: 'this is sample', errorMessage: 'status is error' },
    b = { errorMessage: 'status is error', sample: 'this is sample' },
    sortA = JSON.stringify(Object.entries(a).sort(sortBy(0))),
    sortB = JSON.stringify(Object.entries(b).sort(sortBy(0)));

console.log(sortA === sortB);
1 голос
/ 05 апреля 2019

Вам нужно использовать toEqual для сравнения этого объекта:

expected(sortA).toEqual(sortB)
0 голосов
/ 05 апреля 2019

Вместо этого вы должны создать функцию, которая делает это:

const a = {
   sample: 'this is sample',
   errorMessage: 'status is error',
};

const b = {
   errorMessage: 'status is error',
   sample: 'this is sample',
};

const c = {
   errorMessage: 'status is error !',
   sample: 'this is sample',
};

const compare = (ob1, ob2) => 
  Object.keys(ob1).length === Object.keys(ob2).length
  && !Object.keys(ob1).some(key => ob2[key] !== ob1[key]);
  
  console.log(compare(a, b));
  console.log(compare(a, c));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...