区分数组中的修改对象或集合

时间:2019-04-13 18:09:29

标签: javascript arrays

这一次,我遇到以下问题,我从数据库中获取了一个对象数组,该对象数组每隔几分钟更新一次,问题是与以前的数组相比,该数组可以带有新对象或已删除对象。例如;

第一次输入数据

[
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Lisa', color: 'rose', age: '4'}
]

第二次数据输入(添加了一个对象)

[
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Lisa', color: 'rose', age: '4'},
  {name: 'Adam', color: 'green', age: '11'}
]

第三次数据输入(删除一个对象)

[
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Adam', color: 'green', age: '11'}
]

与第一个条目相比,我需要检测并验证添加或删除了哪个元素,尝试通过按键进行forEach操作,但是由于对象的顺序不同,因此无法使用它

如何获得这些差异?

2 个答案:

答案 0 :(得分:1)

在尝试并找到最佳解决方案后,我设法做到了以下....

它可以很好地满足我的需求,我在JS中很基本,我希望自己不要犯错,我与可能需要它的人分享。

稍后见。

let before = [
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Lisa', color: 'rose', age: '4'}
]

// second data entry ( an object is added )

 let after = [
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Lisa', color: 'rose', age: '4'},
  {name: 'Adam', color: 'green', age: '11'}
]

// third data entry ( an object is deleted )
let afterD = [
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Adam', color: 'green', age: '11'}
]

// new element
let newElement = after.filter(element => {
  return !before.some(e => element.name === e.name);
});

// delete element
let deleteElement = before.filter(element => {
  return !afterD.some(e => element.name === e.name);
});

console.log('new element: ')
console.log(newElement)
console.log('delete element: ')
console.log(deleteElement)

答案 1 :(得分:0)

首先,您需要检查它们的长度,因为如果新数组的长度大于旧数组的长度,则需要在新数组中循环,否则需要在旧数组中循环。这是最重要的一点,您可以找到2个数组的区别。

 var oldVal = [
      {name: 'Paul', color: 'blue', age: '7'},
      {name: 'Lisa', color: 'rose', age: '4'}
    ];
    var newVal = [
      {name: 'Paul', color: 'blue', age: '7'},
      {name: 'Lisa', color: 'rose', age: '4'},
      {name: 'Adam', color: 'green', age: '11'},
      {name : 'xxx'}
    ];

    var t1=[];
    var t2=[];
    if(newVal.length >= oldVal.length){
      t1=newVal;
      t2=oldVal;
    }  
    else{
      t1=oldVal;
      t2=newVal;
    }


    var dif=[];
    t1.forEach(i => {
      var res = t2.findIndex(x => JSON.stringify(x) == JSON.stringify(i));
      console.log(res);
      if(res == -1 ){
        dif.push(i);
      }
    })
    console.log(dif);

结果将是

0: {name: "Adam", color: "green", age: "11"}
1: {name: "xxx"}