Как удалить дубликаты из массива объектов, сравнивая oldArray с newArray? - PullRequest
0 голосов
/ 01 февраля 2019

Допустим, у меня есть два массива, и они:

var oldArray = [
  {name: 'Trump', isRunning: false},
  {name: 'Cruz', isRunning: false},
  {name: 'saga', isRunning: false}
];

var newArray = [
  {name: 'Trump', isRunning: true},
  {name: 'Cruz', isRunning: true},
  {name: 'mega', isRunning: true},
  {name: 'alpha', isRunning: true},
  {name: 'beta', isRunning: true},
  {name: 'oliverspost', isRunning: true}
];

Я хочу удалить все дубликаты объекта из newArray и заменить на соответствующий объект oldArray.Также любой объект в oldArray, если он отсутствует в newArray, меняет время isRunning на «True» и передает его в newArray.

Ожидаемый результат:

[
  {name: 'Trump', isRunning: true},
  {name: 'Cruz', isRunning: true},
  {name: 'mega', isRunning: true},
  {name: 'alpha', isRunning: true},
  {name: 'beta', isRunning: true},
  {name: 'daya', isRunning: true},
  {name: 'oliverspost', isRunning: true},
  {name: 'saga', isRunning: true}
]

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019
var oldArray = [
    {name: 'Trump', isRunning: false},
    {name: 'Cruz', isRunning: false},
    {name: 'saga', isRunning: false}
];

var newArray = [
   {name: 'Trump', isRunning: true},
   {name: 'Cruz', isRunning: true},
   {name: 'mega', isRunning: true},
   {name: 'alpha', isRunning: true},
   {name: 'beta', isRunning: true},
   {name: 'oliverspost', isRunning: true}
];


var currentArray = [...oldArray,...newArray]
var obj = {};

for ( var i=0, len=currentArray.length; i < len; i++ )
    obj[currentArray[i]['name']] = currentArray[i];
Object.keys(obj).map((i)=> obj[i])
0 голосов
/ 01 февраля 2019

var oldArray = [
  {name: 'Trump', isRunning: false},
  {name: 'Cruz', isRunning: false},
  {name: 'saga', isRunning: false}
];

var newArray = [
  {name: 'Trump', isRunning: true},
  {name: 'Cruz', isRunning: true},
  {name: 'mega', isRunning: true},
  {name: 'alpha', isRunning: true},
  {name: 'beta', isRunning: true},
  {name: 'oliverspost', isRunning: true}
];

newArrayNamesOnly = newArray.map(value => value.name);

oldArray.map(value => {
    let currentName = value.name;
    if (!newArrayNamesOnly.includes(currentName)){
        newArray.push({name: currentName, isRunning: true});
        newArrayNamesOnly.push(currentName);
    }
});

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