2013-01-12 32 views
2

我有對象的數組,看起來像這一點,但有點大:刪除整個對象,如果一個屬性有一定的價值

var total = [{ cost="6.00", descrip="tuna"},{ cost="5.50", descrip="cod"}]; 

我需要從數組中刪除特定對象充分的一種方式。是否有可能識別對象的索引,根據財產的價值?拼接方法看起來像它可以工作,如果是這樣的話。

total.splice(x,1); 

否則也許我可以以某種方式使用下面?可以在陣列中的對象被賦予名字和這個莫名其妙使用:

delete total[]; 
+0

你可以有對象中的對象,至極意味着你可以以某種方式對象或索引它設置一個名稱,如果這就是你的後? – Richard

回答

3

不能確定你的問題是什麼。你首先要找到你要刪除哪個項目:

function findItem(arr) { 
    for(var i = 0; i < arr.length; ++i) { 
    var obj = arr[i]; 
    if(obj.cost == '5.50') { 
     return i; 
    } 
    } 
    return -1; 
} 

findItem(total)函數將返回匹配cost == '5.50'條件(當然你也可以使用另外一個)元素的索引。現在你知道該怎麼辦了:

var i = findItem(total); 
total.splice(i, 1); 

我假設在數組中至少有一個對象匹配條件。

+0

@tucuxi:nope,['splice()'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice)就地修改參數並僅返回已移除的元素 –

+0

作者golly,你是對的。我正在用slice()的返回來弄錯它。 – tucuxi

0

我可能有錯誤的理解,但不是這個很簡單,你爲什麼要拼接?

var i = 0, 
    count = total.length; 

// delete all objects with descrip of tuna 
for(i; i < count; i++) { 
    if (total[i].descrip == 'tuna') { 
     delete total[i] 
    } 
} 
1

該功能用於刪除第一個對象與object.keyName ===值數組

function deleteIfMatches(array, keyName, value) { 
    for (i=0; i<array.length; i++) { 
     if (array[i][keyName] === value) { 
      return array.splice(i, 1); 
     } 
    } 
    // returns un-modified array 
    return array; 
} 
0

,除非你用冒號,而不是equals-

你的對象將不會被初始化你可以過濾一個數組,返回的數組不包含任何值,但那些通過了一些測試的值。

這將返回花費美元以上的項目的數組:

var total= [{ 
    cost:"6.00", descrip:"tuna" 
},{ 
    cost:"5.50", descrip:"cod" 
},{ 
    cost:".50", descrip:"bait" 
} 
].filter(function(itm){ 
return Number(itm.cost)>= 1; 
}); 

/*返回值:

[{ 
     cost:'6.00', 
     descrip:'tuna' 
    },{ 
     cost:'5.50', 
     descrip:'cod' 
    } 
] 
1

對於ES5兼容的瀏覽器,你可以使用filter()。例如。刪除所有項目成本< 6:

total = total.filter(function(item) { 
    return item.cost < 6.0; 
}); 
+0

謝謝。這解決了我的問題。 – sg552

相關問題