如何从比较oldArray和newArray的对象数组中删除重复项?

时间:2019-02-01 09:56:50

标签: javascript arrays json angular object

假设我有两个数组,它们是:

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的对应对象。同样,如果newArray中不存在,则oldArray中的任何对象会将其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 :(得分:-1)

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);

答案 1 :(得分:-1)

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])