var arr=[1,2,3,[4,5],6,[7,8,9]],x,j;
for(x in arr)
for(j in arr[x])
console.log(arr[x][j]);
我想打印1,2,3,...,9但上面的代码打印4,5,7,8,9。
答案 0 :(得分:1)
如果我正确理解你的问题,你想要控制台记录1到9。你现在拥有它的方式,它只打算在阵列中打印数组 - 这就是为什么你只得到4,5,7 ,8,9。
您可以做的是检查第一个循环中的值是否为数组 - 如果是,则迭代它并打印值。如果不是,只需打印该值。
if(arr[x].constructor === Array) {
//loop over the array and print out the values
for (j in arr[x]) {
console.log(arr[x][j])
}
} else {
//print out the plain value
console.log(arr[x])
}
这是一支显示结果的笔:http://codepen.io/kyledodge/pen/zGwPBo
另一种选择是使用递归。你可以这样做:
var printArrayValue = function(array) {
for (var i = 0; i < array.length; i++) {
if (array[i].constructor === Array) {
//if this an array, call this function again with the value
printArrayValue(array[i]);
} else {
//print the value
console.log(array[i]);
}
}
}
printArrayValue(arr);
这是一支显示结果的笔:http://codepen.io/kyledodge/pen/VLbrPX
答案 1 :(得分:1)
我认为“加入”就足够了:
console.log(arr.join());
答案 2 :(得分:0)
将每个元素强制转换为数组:
var arr=[1,2,3,[4,5],6,[7,8,9]],x,j;
for(x in arr) {
var arr2 = [].concat(arr[x]);
^^^^^^^^^^^^^^^^^
for(j in arr2)
console.log(arr2[j]);
}
这是有效的,因为concat
采用数组或单个值。