如何使用jQuery或JavaScript循环遍历数组?

时间:2017-11-14 17:41:42

标签: javascript jquery html json

我有一个像这样的json数组

var data = key: [
    {
        arr1: [
            {value: 1},
            {value: 2},
            {value: 3},
        ]
    },
    {
        arr2: [
            {value: 1},
            {value: 2},
            {value: 3},
        ]
    },
    {
        arr3: [
            {value: 1},
            {value: 2},
            {value: 3},
        ]
    }
]

我想循环遍历key 3次,在密钥循环中,我想再次循环遍历key内的每个元素。

首先我尝试了$.each,它适用于键阵列。在每个函数内部,我尝试使用循环中的Object.key(this)来获取键值,这会返回名称

arr1, arr2, arr3

但是我无法遍历我得到的名字。

$.each(data, function(i, e) {
    Object.keys(this).each(function(index, element) {
        console.log(element);
    })    
})

我不知道这是否是正确的做法,当我尝试这样做时。我收到一个错误,告诉.each不是函数。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:8)

执行此操作的简单方法是使用三个循环,但尝试使用this在每个循环中赋予新含义的工作将会不必要地复杂化。

我建议使用.forEach并为每个循环变量指定一个明确的名称:

var data =  [
    {
        arr1: [
            {value: 1},
            {value: 2},
            {value: 3},
        ]
    },
    {
        arr2: [
            {value: 1},
            {value: 2},
            {value: 3},
        ]
    },
    {
        arr3: [
            {value: 1},
            {value: 2},
            {value: 3},
        ]
    }
]

data.forEach(function (outerObj) {
  Object.keys(outerObj).forEach(function (key) {
    outerObj[key].forEach(function (item) {
      console.log(item);
    });
  });
});
    

当然,如果你真的告诉我们你想用这些循环完成什么,可能会有更好的解决方案。

答案 1 :(得分:4)

如果你想继续使用jQuery模式,那么只需为每个嵌套级别使用each



var data = [{arr1: [{value: 1}, {value: 2}, {value: 3}]}, {arr2: [{value: 1}, {value: 2}, {value: 3}]}, {arr3: [{value: 1}, {value: 2}, {value: 3}]}];

$.each(data, function(i, e) {
    $.each(e, function(key, arr) {
        console.log(key);
        $.each(arr, function(index, obj) {
            console.log("...", index, obj.value);
        });
    });
})

.as-console-wrapper { max-height: 100% !important; top: 0; }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:3)

我认为您尝试无效的原因是因为您尝试.each个别值本身,而不是data中的数组。

这应该有效:

$.each(data, function(index, array) { // This each iterates over the arrays.
  $.each(array, function(subindex, value) { // This each iterates over the individual values.
    console.log(value); // Logs the individual values.
  });
});