首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问和迭代嵌套数组

如何访问和迭代嵌套数组
EN

Stack Overflow用户
提问于 2019-08-30 18:21:48
回答 1查看 34关注 0票数 1

我使用Laravel作为后端,使用jQuery作为前端。我得到了一个响应,它在一个对象中有一个数组,这个对象在主数组中(希望这是有意义的)。

这是我的对象的一部分:

代码语言:javascript
运行
复制
{
  "basket": [{
    "id": 17,
    "restaurant_id": 1,
    "table_id": 1,
    "item_id": 9,
    "item_language_id": 37,
    "price": "25.99",
    "qty": 1,
    "item": {
      "id": 9,
      "user_id": 1,
      "restaurant_id": 1,
      "category_id": 5,
      "name": "Grilled Beef with potatoes",
      "price": "25.99",
      "short_description": "Meat / Potatoes / Rice / Tomatoe",
      "itemlanguages": [{
        "id": 37,
        "user_id": 1,
        "item_id": 9,
        "lang_id": 9,
        "restaurant_id": 1,
        "category_id": 5,
        "category_language_id": 21,
        "name": "烤牛肉配土豆",
        "price": "MVR 25.99",
        "short_description": "肉/土豆/大米/西红柿",
        "description": "<p>test</p>"
      }]
    }
  }]
}

basket是一个数组。里面是一个拥有itemlanguages数组的item对象。我想遍历basket,但显示itemlaguages nameprice等,而不是从item。这是我到目前为止所尝试过的。

代码语言:javascript
运行
复制
$.each(response.basket, function(index, val) {
  $.each(this.item.itemlanguages, function(index, val) {
    name = this.name;
    short_description = this.short_description;
  });

  var name = null;
  var short_description = null;
  var qty = this.qty;
  var price = this.price;

  $('<span>' + name + ' | ' + short_description + ' | ' + qty + ' | ' + price + '</span>').appendTo(basket);
});

我想我可以重复我通常做的事情,首先在response.basket上做each(),然后在里面做this.item.itemlanguages,但这不起作用。我尝试将这些值赋给一个变量。任何帮助都是非常感谢的。

EN

Stack Overflow用户

回答已采纳

发布于 2019-08-30 18:28:04

这个问题是因为nameshort_description是在itemlanguages上的$.each循环中定义的,因此超出了您试图使用它们的外部$.each的范围。

要解决此问题,请将所有逻辑移入内部$.each。还要注意,您可以使用$.each的第二个参数来引用循环中的当前实体,以使语法更易于理解(因为使用的this关键字较少)。试试这个:

代码语言:javascript
运行
复制
var response = {
  "basket": [{
    // other properties...
    "price": "25.99",
    "qty": 1,
    "item": {
      // other properties...
      "itemlanguages": [{
        // other properties...
        "name": "烤牛肉配土豆",
        "short_description": "肉/土豆/大米/西红柿"
      }]
    }
  },{
    // other properties...
    "price": "999.00",
    "qty": 2,
    "item": {
      // other properties...
      "itemlanguages": [{
        // other properties...
        "name": "lorem ipsum dolor sit amet",
        "short_description": "lorem ipsum"
      }]
    }
  }]
}

var $basket = $('#basket');
$.each(response.basket, function(index, basket) {
  $.each(basket.item.itemlanguages, function(index, itemlanguage) {
    var name = itemlanguage.name;
    var short_description = itemlanguage.short_description;
    var qty = basket.qty;
    var price = basket.price;

    $('<span>' + name + ' | ' + short_description + ' | ' + qty + ' | ' + price + '</span>').appendTo($basket);
  });
});
代码语言:javascript
运行
复制
span {
  display: block;
}
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="basket"></div>

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57724940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档