【问题标题】:How to find an object in an array, then deleting it and returning the array?如何在数组中找到一个对象,然后删除它并返回数组?
【发布时间】:2017-08-03 02:30:13
【问题描述】:

我正在做一个 Javascript 练习,该练习需要一个函数,该函数可以在数组中搜索具有特定属性的对象。如果存在这样的对象,该函数应该删除该对象,然后返回数组。如果数组中不存在这样的对象,则该函数应返回一个字符串,说明该对象不存在。

到目前为止,我已经编写了以下代码,以购物车为例,但我没有得到想要的结果。如果我在购物车 [0] 中搜索对象,它会按预期工作。但是,任何索引高于 0 的东西都会返回“该商品不在您的购物车中”。我做错了什么?

var cart = [{apples: 12}, {oranges: 20}, {grapes: 35}, {peaches: 18}]

function removeFromCart(item){ 

   for (var i = 0; i < cart.length; i++){     
    if (cart[i].hasOwnProperty(item)) {
      cart.splice(i, 1);
      return cart;
    }
    else {
      return "That item is not in your cart.";
    }
   }
  }

【问题讨论】:

  • 你可能想看看Array#filter
  • @trincot - 当然会,因为cart没有调用它。
  • 无论如何你的循环都很糟糕,假设你要删除的项目是数组中的第二个,当它开始通过 for 循环时,在第一个项目上它会转到 else,并停止循环,因为return 语句,它永远不会通过所有这些。

标签: javascript object splice


【解决方案1】:

问题在于,在循环的第一次迭代中,如果if 条件不成立,它将立即执行else 条件和return。去掉 else 并将第二个 return 语句移动到 循环之后 - 这样“未找到”条件仅在检查每个项目后应用。

var cart = [{apples: 12}, {oranges: 20}, {grapes: 35}, {peaches: 18}]

function removeFromCart(item){ 
  for (var i = 0; i < cart.length; i++){     
    if (cart[i].hasOwnProperty(item)) {
      cart.splice(i, 1);
      return cart;
    }
  }
  // not found:
  return "That item is not in your cart.";
}

console.log(removeFromCart("grapes"));

顺便说一句,有时返回一个数组而有时返回一个字符串的函数可能会有点令人困惑。鉴于您的函数正在更新函数外部定义的cart 变量,我更倾向于返回一个空字符串表示成功,返回一个错误字符串表示失败。

【讨论】:

    【解决方案2】:

    希望对你有用

    var cart = [{
      apples: 12
    }, {
      oranges: 20
    }, {
      grapes: 35
    }, {
      peaches: 18
    }]
    
    function removeFromCart(item) {
      cart.forEach(function(elem, index) {
        if (elem.hasOwnProperty(item)) {
          cart.splice(index, 1);
        }
      })
      return cart; // return the array
    }
    
    console.log(removeFromCart('apples'))
    

    DEMO

    在我的选择中最好不要在循环中修改一个数组,事实上你可以使用过滤器功能,而不修改原始数组,可以继续

    function removeFromCart(item) {
    
     var _x = cart.filter(function(elem){
      return !elem.hasOwnProperty(item)
      })
    return _x
    }
    
    console.log(removeFromCart('apples'))
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2018-08-22
      • 2019-10-21
      相关资源
      最近更新 更多