簡體   English   中英

根據對象的屬性刪除數組的對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM