JavaScript: сравнение двух объектов - PullRequest
0 голосов
/ 12 марта 2019

Я хочу сравнить два объекта, чтобы создать новый объект.

original = [
            {id: "A1", name: "Nick", age: 20, country: 'JP', code: 'PHP'}
           ]

edited = [
          {name: "Mike", age: 30, country: 'US'},
          {id: "A1", name: "Nick", age: 25, country: 'US', code: 'PHP'}
         ]
  1. Сравнить два объекта («исходный» и «отредактированный»)
  2. Если «id» равенустановить, сравнить данные тех же идентификаторов и взять данные из «отредактировано», и получить ТОЛЬКО «ID» и данные, которые редактируются.
  3. Если «ID» не установлен, сохранить все данные

Последний объект, который я хочу, подобен ниже;

final = [
         {name: "Mike", age: 30, country: 'US'},
         {id: "A1", age: 25, country: 'US'}
        ]

Я пробовал это с помощью фильтра, но я не могу получить желаемый результат ...

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

используйте de structuring для извлечения идентификатора из объекта. используйте метод lodash isEqual для сравнения, а затем добавьте обратно идентификатор объекта.

0 голосов
/ 12 марта 2019

Попробуйте с Array#reduce.

Обновлено при совпадении всех пар ключей

  • Проверить доступно значение идентификатора отредактированного массивав исходном массиве с использованием Array#map и indexOf функции
  • Если не выдвинуть весь объект в новый массив
  • Сначала заново создайте исходный массив в формате объекта, например {key:[value]}
  • Затем сопоставьте каждую пару значений ключа или нет с forEach внутри функции уменьшения

var original = [{id: "A1", name: "Nick", age: 20, country: 'JP'}];
var edited = [{name: "Mike", age: 30, country: 'US'},{id: "A1", name: "Nick", age: 25, country: 'US'}];

var ids_org = Object.keys(original[0]).reduce((a,b,c)=> (a[b]=original.map(a=> a[b]),a),{});

var res = edited.reduce((a, b) => {
  if (b.id) {
      Object.keys(b).forEach(i=>{
      if(ids_org[i].indexOf(b[i]) > -1 && i != 'id')
         delete b[i];
      })
     a.push(b);
  } else {
    a.push(b);
  }
  return a;
}, []);

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