我有一个像这样的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
不是函数。
非常感谢任何帮助。
答案 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;
答案 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.
});
});