根据对象的属性删除数组的对象

时间:2018-08-17 14:54:35

标签: javascript arrays

我有一个像这样的数组:var obj = [{x:4, y:5}, {x:6, y:2}, ...],我正试图删除基于x的内部对象(属性)之一。

这就是我要这样做的方式:

 obj.forEach(function (child){
    if(child.x === 4){
      obj.destroy(child)
    }
 });

但是它不起作用,我得到了

  

obj.destroy不是一个功能

我也尝试过obj.splice(child),但是它弄乱了数组。所以这是怎么了? 还有没有一种更好的方法可以不必每次都遍历所有Array属性?

4 个答案:

答案 0 :(得分:3)

您可以在数组上使用过滤器:例如

let arrayToFilter = [ {x:4, y:5}, {x:6, y:2}];
const valueToFilter = 4;

var filteredArray = arrayToFilter .filter((o) => {
    return o.x !== valueToFilter;
});

console.log(filteredArray);

答案 1 :(得分:1)

forEach()适用于数组。

如果obj是一个数组,则可以简单地使用filter()从该数组中删除不需要的对象:

var obj = [{x:4, y:5}, {x:6, y:2}]

obj = obj.filter(c => c.x !== 4)
 
console.log(obj);

答案 2 :(得分:0)

您也许将数组设为obj,因为您在问题中发布的数组只是无效的语法。

此外,您可以使用Array#findIndex首先获取匹配元素的索引,然后使用splice从数组中获取该索引。

var obj = [{x:4, y:5}, {x:6, y:2}];
var index = obj.findIndex(item => item.x === 4);
obj.splice(index, 1);

console.log(obj);

答案 3 :(得分:-1)

我假设您尝试过滤出数组中具有x与给定值匹配的对象。如果是这样,您可能应该使用filter方法。

所以假设这就是您的意思,您可以执行以下操作

obj = obj.filter(function (child){
if(child.x !== 4){
  return obj
}
});
// shorter
obj = obj.filter( child => child.x !== 4 );

在这种情况下,obj变量中只有不具有4值的对象可用。所有其他对象(假设您的代码中没有其他引用)将被垃圾回收。