【问题标题】:jquery, how to loop through complex arrayjquery,如何遍历复杂的数组
【发布时间】:2016-11-01 20:52:36
【问题描述】:

我做了一个 ajax 并返回了一个 5 级深的多维数组,每个级别都有很多项。我想遍历每个级别并创建 HTML 语法。 5级全部完成后。我将加入所有语法并将整个列表附加到 HTML 中。

现在我担心如何循环纠正它。

数组结构如下图

var array = [object, object, object, object]
            |0 object level 1
              |1 object level 2
                |0 object level 3
                  |0 object level 4
                    |0 object level 5
            |1 object
            |2 object 
            |3 object 

这是一个简化的示例数据

var test = [
    {
        "someid":"25",
        "level1":[
            {
                "name":"john doe",
            }
            "level2": [
            {
                "order_quantity":"1",
                "order_price":"12.00",
                "level3":[
                {
                    "addon_price":"2.00"
                }]
            }]
        }]
    }
]

我尝试使用 javascript for 循环,但在第 2 级之后它变得非常丑陋且难以跟踪。

一级循环

for(i=0; i<array.length;i++)

二级循环

for(n=0; n<array[i].level1.length;n++)

第三级循环

for(y=0;y<array[i].level2[n].level3.length;y++) 

我不认为这是正确的方法。

像这样循环遍历数组的正确方法是什么

我也有 jquery。但也不知道如何使用 $.each 来做到这一点。

欢迎使用 jquery 解决方案。

【问题讨论】:

  • 请添加您的阵列样本。
  • 如果你需要点击每一个元素,那么无论你如何使用 5 维数组都可能会很讨厌。
  • 退一步——有没有办法减少嵌套的数据结构?是否可以在您的 ajax 请求中更具体地返回更多平面数据?

标签: javascript jquery arrays multidimensional-array


【解决方案1】:

您可以使用递归方法。

var array = [[[1, 2, 3, 4], [[5, 6]]], [7, 8], [9, 10], [11, 12]];

array.forEach(function iter(a) {
    if (Array.isArray(a)) {
        a.forEach(iter);
        return;
    }
    console.log(a);
});

或者使用硬编码解决方案

var test = [{ someid: "25", level1: [{ name: "john doe", level2: [{ order_quantity: "1", order_price: "12.00", level3: [{ addon_price: "2.00" }] }] }] }];

test.forEach(function (a) {
    a.level1.forEach(function (b) {
        b.level2.forEach(function (c) {
            c.level3.forEach(function (d) {
                console.log(d.addon_price);
            });
        });
    });
});

如果子关卡遵循相同的构建规则,或者使用更动态的解决方案。

var test = [{ someid: "25", level1: [{ name: "john doe", level2: [{ order_quantity: "1", order_price: "12.00", level3: [{ addon_price: "2.00" }] }] }] }];

test.forEach(function iter(level) {
    return function (a) {
        if (Array.isArray(a['level' + level])) {
            a['level' + level].forEach(iter(level + 1));
            return;
        }
        Object.keys(a).forEach(function (k) {
            console.log(a[k]);
        });
    }
}(1));

【讨论】:

  • 如果有一个对象数组与一个数组数组,这会起作用吗?例如OP 看起来他有一个对象数组。您的解决方案看起来像是处理数组数组。
  • 对,我在询问操作的一些数据,以解决问题,但迭代方法也可以提供帮助。
  • @NinaScholz 我刚刚添加了一个 3 级样本数据。基本思路是这样的。我想如果我能做到 3 级,我就能得到一个好主意。
  • 我认为这可能是答案,它看起来很有前途并且超级容易使用。我将使用完整的数据进行尝试并报告。
  • @NinaScholz 感谢 Nina,这很好用。非常干净,可以查看并弄清楚发生了什么。
猜你喜欢
  • 2019-11-08
  • 1970-01-01
  • 2020-12-21
  • 2019-09-18
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
相关资源
最近更新 更多