【问题标题】:javascript vuejs object array returning only one item in the loopjavascript vuejs对象数组在循环中只返回一项
【发布时间】:2018-02-16 13:32:34
【问题描述】:

我试图迭代一个对象数组,而不是它只返回一个项目,这里是代码:

setAll(){
  var result =this.cart;
  for (var key in result) {
    var obj = result[key];
  }
  return obj.price;
}

和测试数据

 [ { "id": 5, "price": 3200, "quantity": 8, "name": "juice" }, { "id": 6, 
  "price": 300, "quantity": 6, "name": "rice" }, { "id": 8, "price": "100", 
  "quantity": 1, "name": "water" }, { "id": 7, "price": "4500", "quantity": 
   1, "name": "meat" } ]

【问题讨论】:

  • 你想要的最终结果是什么?你想返回一个包含所有对象价格的数组吗?喜欢[3200, 300, 100, 4500]?
  • 提供更多信息会更容易回答这个问题;例如,除了您的标题之外,没有任何内容可以告诉我们您正在使用 Vue。如果您提供有关您正在尝试做的事情的更多信息,其他人会更容易帮助您实现这一目标。
  • 我只想使用 vuejs 返回带有价格的值
  • 目前它只返回一个价格项目
  • 您应该使用prices = cart.map(({price}) => +price);cart 数组中获取所有价格。

标签: javascript laravel-5 vue.js


【解决方案1】:

您正在遍历数组并且只返回最后一个对象。这段代码:

for (var key in result) {
   var obj = result[key];
}

除了将obj 设置为列表中的最后一项之外什么都不做。

【讨论】:

    【解决方案2】:

    现在object 将被设置为循环中最后一次迭代的值,您将只返回该对象的价格。

    【讨论】:

    • 这应该是评论
    • 我想过,但它也包含上面答案中的信息。
    • 好的,从答案中提取了一条评论。
    【解决方案3】:

    你的函数替换为

    setAll(){
      return this.cart.map(({ price }) => +price);
    }
    

    我写jsfiddle你的问题的例子

    【讨论】:

    • 使用这个函数我得到 babel-loader 错误
    • @IgorOgnichenko 编辑您的答案,添加您的 jsfiddle 而不是评论。尝试做出一个可读、简单和完整的答案
    【解决方案4】:

    这对我有用:

              setAll(){
              var result =this.cart;
              var res=Object.keys(result).map(function(key){
                return parseInt(result[key].price);
              });
              return res;
    
             },  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多