如果项目存在则从对象中删除,然后再次推送

时间:2015-11-26 08:30:17

标签: javascript arrays

我有如下数组,我想首先检查数组中的记录是否已经存在,然后推送类似的记录。

    arr1 = [{
        'Name': 'Ken',
         'Id' : 123,
         'Units' : 100
    }, {
        'Name': 'Kris',
        'Id': '223',
        'Units' : 100 
    }, {
        'Name': 'Ben',
        'Id': '229',
        'Units' : 100
    },
     {
        'Name': 'Alex',
        'Id': '222',
        'Units' : 100
    }]

现在假设我要添加类似的记录

{
        'Name': 'Ken',
         'Id' : 123,
         'Units' : 50
}

此处仅更改了单位的值,有时它也可能保持不变。

我想要的是删除最初的类似记录(通过Id检查)并推送新记录。

所以我的最终数组应该像

arr1 = [{
        'Name': 'Ken',
         'Id' : 123,
         'Units' : 100
    }, {
        'Name': 'Kris',
        'Id': '223',
        'Units' : 100 
    }, {
        'Name': 'Ben',
        'Id': '229',
        'Units' : 100
    },
     {
        'Name': 'Alex',
        'Id': '222',
        'Units' : 100
    }]

2 个答案:

答案 0 :(得分:2)

var newRecord = {
    'Name': 'Ken',
    'Id': 123,
    'Units': 50
};

arr1 = arr.filter(function (el) {
    return el.Id != newRecord.Id;
});

arr1.push(newRecord);

演示:

arr1 = [{
  'Name': 'Ken',
  'Id': 123,
  'Units': 100
}, {
  'Name': 'Kris',
  'Id': '223',
  'Units': 100
}, {
  'Name': 'Ben',
  'Id': '229',
  'Units': 100
}, {
  'Name': 'Alex',
  'Id': '222',
  'Units': 100
}]

var newRecord = {
  'Name': 'Ken',
  'Id': 123,
  'Units': 50
};

arr1 = arr1.filter(function(el) {
  return el.Id != newRecord.Id;
});

arr1.push(newRecord);

alert(JSON.stringify(arr1));

答案 1 :(得分:1)

根据相关属性过滤掉旧记录并添加新记录。

similarRecord = {
  id = 123
  ...
}

_arr1 = arr1.filter(function(obj){
  return obj.id != similarRecord.id
})

_arr1.push(similarRecord)