squadbrodyaga
@squadbrodyaga
帆は風を変えた

Как сравнить два массива объектов и получить разницу?

Добрый день, помогите разобраться, я хочу узнать как сравнить два массива
и получить разницу между ними, вот что я имею ввиду:

// Есть два массива
const array_1 = [
  { id: 0, name: 'Андрей' },
  { id: 1, name: 'Дмитрий' },
  { id: 2, name: 'Владимир' },
  { id: 3, name: 'Альбус' }
]

const array_2 = [
  { id: 0, name: 'Андрей' },
  { id: 1, name: 'София' },
  { id: 2, name: 'Владимир' },
]

// Я удалил объект с 'name: Альбус', а в объекте с 'id: 1' сделал изменения
// как мне получить изменённые и удалённые данные и добавить их в 
// соответствующие массивы?

const deleted = [{ id: 3, name: 'Альбус' }]
const changed = [{ id: 1, name: 'София' }]
  • Вопрос задан
  • 327 просмотров
Решения вопроса 1
squadbrodyaga
@squadbrodyaga Автор вопроса
帆は風を変えた
Использовал lodash. Код:
const _ = require('lodash')

const newArray = array_2
const oldArray = array_1


// возвращает новые и обновлённые данные
const changed = newArray.filter(newitem => {
    const olditem = oldArray.find(o => o.id == newitem.id)
    return !_.isEqual(newitem, olditem)
  })

  

  const deleted = oldArray.filter(olditem => {
    const newitem = newArray.find(n => n.id == olditem.id)
    return !_.isEqual(newitem, olditem)
  }).filter(item => { // теперь нужно достать только удалённые данные, а обновлённые проигнорить.
    const item = changed.find(cd => cd.name == item.name)
    return !item
  })
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Drilled-prog
@Drilled-prog
Программирую на ['php', 'js']
Можно через прокси: https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы