我有一个像这样的数组: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属性?
答案 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值的对象可用。所有其他对象(假设您的代码中没有其他引用)将被垃圾回收。