删除数组中的特定键

时间:2017-04-10 18:35:26

标签: javascript arrays dictionary

感谢您的光临。我对我的代码感到困惑但很困惑。我尝试过不同的变体,但仍然无法从一组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
}

1 个答案:

答案 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;
  });
}

我还鼓励你编写纯函数,因为这将有助于你更好地理解(编码意图)和调试。