JavaScript删除数组对象中的多个值

8

我是一名新手,正在学习 JavaScript 并尝试从对象数组中删除多个值。

现在,我可以像这样删除一个对象:

if(obj.findObjectByKey(response, 'cat_id', 171) == true) {
    var catId = response.map(item => item.cat_id).indexOf(171);
}

在上面的代码中,我将删除ID为“171”的项目,但现在我有一个包含多个值的数组,我想要删除这些值。
那么我如何修改上面的代码,让我传入一个要从列表中删除的项目数组,例如['171','172','173','174'];
4个回答

28

如果您能使用ES6,尝试使用JavaScript的filterincludes

const nums = [1, 2, 3, 4, 5, 6];
const remove = [1, 2, 4, 6];

function removeFromArray(original, remove) {
  return original.filter(value => !remove.includes(value));
}

console.log(removeFromArray(nums, remove));

这同样适用于字符串。

const nums = ["1", "2", "3", "4", "5", "6"];
const remove = ["1", "2", "4", "6"];

function removeFromArray(original, remove) {
  return original.filter(value => !remove.includes(value));
}

console.log(removeFromArray(nums, remove));

这个解决方案的另一个好处是不可变性。这意味着你返回新数据而不是改变旧数据,这被认为是良好的实践。

https://wecodetheweb.com/2016/02/12/immutable-javascript-using-es6-and-beyond/


0
你只需要循环遍历该数组,并检查数组元素即可。
arrayToRemove = ['171', '172', '173', '174'];

for (i = arrayToRemove.length; i>=0; i--) {
   if(obj.findObjectByKey(response, 'cat_id', arrayToRemove[i]) == true) {
       var catId = response.map(item => item.cat_id).indexOf(arrayToRemove[i]);
       response.splice(catId, 1);
   } 
}

还有其他方法可以实现这个功能,但是这种方法是最快速、最直接且不需要对当前代码做出太多修改的方式。

值得注意的是,应该从数组的末尾开始循环删除到开头,以便保留其余数组元素的索引。


0
   var userList = [
      { name: 'abhijeet', city: 'pune', id: 1},
      { name: 'rohit', city: 'pune', id: 2},
      { name: 'vicky', city: 'deglur', id: 3},
      { name: 'abhilash', city: 'washim', id: 4},
      { name: 'sumit', city: 'nagpur', id: 5}
    ];

    var removeUsers = [
      { name: 'vicky', city: 'deglur', id: 3},
      { name: 'sumit', city: 'nagpur', id: 5}
    ];

    var idArray = removeUsers.map((user) => user.id);

    userList = userList.filter((item) => {
        return idArray.indexOf(item.id) === -1;
    });

0
var users = [
  { user: 'barney', age: 36, active: true },
  { user: 'fred', age: 40, active: false },
  { user: 'travis', age: 37, active: true },
];
var app = [{ user: 'barney' }, { user: 'fred' }];
_.forEach(app, (v) => {
  users = _.reject(users, { user: v.user });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接