有关数组的查询

时间:2015-06-08 04:45:06

标签: javascript arrays

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。

3 个答案:

答案 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采用数组或单个值。