感谢您的光临。我对我的代码感到困惑但很困惑。我尝试过不同的变体,但仍然无法从一组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)
现在我们只想删除一个密钥。比如说" new"有价值的关键"书籍"来自newObj对象而不是整个对象。每次我删除整个对象而不是只有一个键。有人可以告诉我我可能遗失的或我出错的地方。这是我正在做的功课。我注意到测试通过,因为我们需要删除我们放入参数的项目,但我希望能够以正确的方式学习它。意思是,移动单个键而不是整个对象。
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
}
答案 0 :(得分:0)
为了更好地理解这一点,我将创建一个示例数据结构:
var cart = [
{ "mcdonald": "food", "starbucks": "coffee" }, // obj
{ "new": "book", "old": "book" } // newObj
];
现在如果我想删除带有键==' new'的项目,很容易看出我们需要迭代数组中的所有对象,然后删除任何与我们正在寻找的匹配的键。
function removeItem(itemKey) {
cart.forEach(function(obj) {
delete obj[itemKey];
return obj;
});
}
我还鼓励你编写纯函数,因为这将有助于你更好地理解(编码意图)和调试。