[英]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.