2017-04-10 78 views
0

謝謝您停止。我對我的代碼感到困惑。我嘗試了不同的變體,但仍然無法從obs數組中刪除單個鍵。例如:刪除陣列中的特定鍵

var cart = []; 
var obj = {}; 
var newObj = {}; 

obj["mcdonald"] = "food" 
obj["starbucks"] = "coffee" 
newObj["new"] = "books" 
newObj["old"] = "books" 

cart.push(obj); 
cart.push(newObj) 

現在我們只想刪除一個鍵。比方說,只需要newObj對象中值爲「books」的「new」鍵而不是整個對象。每一次我都會刪除整個對象而不是僅僅一個鍵。有人可以告訴我我可能錯過了什麼,或者我錯了什麼。這是我正在做的功課。我注意到測試通過了,因爲我們需要刪除我們放入參數的項目,但我想能夠以正確的方式學習它。意思是,移動一個鍵不是整個對象。

function removeFromCart(itemName){ 
for(var newArr in cart){ 
    if (cart.hasOwnProperty(newArr)) { 
    var item = Object.keys(cart[newArr])[0] 
    if (item === itemName) { 
    var index = cart.indexOf(itemName) 
    cart.splice(index, 1) 
    } else { 
    alert('That item is not in your cart.') 
    } 
    } 
} 
return cart 
} 
+1

不是'刪除cart [itemName]'工作嗎? – apokryfos

+0

@apokryfos如果我這樣做了,似乎沒有通過測試。我刪除了var index和cart.splice(index,1),它說測試失敗,因爲沒有被刪除。 –

回答

0

爲了更好地理解這一點,我要創建一個示例數據結構:所以現在,如果我想與刪除項目

var cart = [ 
    { "mcdonald": "food", "starbucks": "coffee" }, // obj 
    { "new": "book", "old": "book" } // newObj 
]; 

鍵==「新」,很容易看到我們需要迭代數組中的所有對象,然後刪除與我們要查找的匹配的任何鍵。

function removeItem(itemKey) { 
    cart.forEach(function(obj) { 
    delete obj[itemKey]; 
    return obj; 
    }); 
} 

我也鼓勵你寫純函數,因爲這樣可以幫助你更好地理解(編碼意圖)和調試。