[英]deleting a object of an Array based on property of the object
我有一个像这样的数组: 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属性更好的方法了?
您可以只在数组上使用过滤器:例如
let arrayToFilter = [ {x:4, y:5}, {x:6, y:2}]; const valueToFilter = 4; var filteredArray = arrayToFilter .filter((o) => { return ox !== valueToFilter; }); console.log(filteredArray);
forEach()
在数组上工作。
如果obj
是一个数组,则可以简单地使用filter()
从数组中删除不需要的对象:
var obj = [{x:4, y:5}, {x:6, y:2}] obj = obj.filter(c => cx !== 4) console.log(obj);
您可能有一个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);
我假设您尝试过滤出具有x
匹配给定值的数组中的对象。 如果是这样,您可能应该使用filter
方法。
因此,假设这就是您的意思,您可以执行以下操作
obj = obj.filter(function (child){
if(child.x !== 4){
return obj
}
});
// shorter
obj = obj.filter( child => child.x !== 4 );
在这种情况下, obj
变量中只有不具有4值的对象才可用。 所有其他对象(假设您的代码中没有其他引用)将被垃圾回收。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.