2017-04-10 75 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; 
    }); 
} 

我也鼓励你写纯函数,因为这样可以帮助你更好地理解(编码意图)和调试。