Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript foreach如何处理多维数组?_Javascript_Arrays - Fatal编程技术网

javascript foreach如何处理多维数组?

javascript foreach如何处理多维数组?,javascript,arrays,Javascript,Arrays,我玩了一点javascript,发现(至少对我来说)在通过foreach循环处理多维数组时出现了奇怪的行为。我有一段代码: <script type="text/javascript"> var arr = [['a', 'b'], ['c','d']]; var first=''; for (var singleArray in arr) { first += ' ' + singleArray[0] + ' ' + singleArray[1]; }

我玩了一点javascript,发现(至少对我来说)在通过foreach循环处理多维数组时出现了奇怪的行为。我有一段代码:

<script type="text/javascript">
  var arr = [['a', 'b'], ['c','d']];

  var first='';

  for (var singleArray in arr) {
    first += ' ' + singleArray[0] + ' ' + singleArray[1];
  }

  var second = '';
  for (var i=0;i<arr.length; i++) {
    second += ' ' + arr[i][0] + ' ' + arr[i][1];
  }

  console.log('First: ', first);
  console.log('Second: ', second);
</script>
我希望第一个和第二个是一样的。你能解释一下我遗漏了什么吗

注意:请不要建议通过jQuery或其他方式对数组进行迭代。我没有编码方面的问题,我只是对这种特殊情况感到好奇。谢谢

for(…in…)
迭代对象的属性,而不是数组的元素

我一直使用这个dump()函数调试多维数组


如果您对实现它有任何疑问,请告诉我。

Erick Mickelsen指出了一些好的观点,但请总结一下

  • for(…in…)
    循环迭代对象属性
  • array
    是Javascript中的一个对象,因此您可以使用它迭代数组。但速度较慢,一般不建议使用(请参阅)
  • 它迭代属性而不是值这一事实意味着它返回的是索引而不是数组值(这在使用关联数组时可能很方便)
  • 问题中的示例可通过(…in…)的
    循环解决
  • 详情如下:

    var third = '';
    for (var arrayIndex in arr) {
      third += ' ' + arr[arrayIndex][0] + ' ' + arr[arrayIndex][1];
    }
    
    在关联数组示例中,
    for(…In…
    循环将非常方便:

    var person = [];
    person["id"] = 1;
    person["born"] = 2009;
    person["favourite_meal"] = "chicken"; 
    
    var fourth = '';
    for (var arrayIndex in person) {
      fourth += ' ' + person[arrayIndex];
    }
    

    嗯,但是我看了好几次,并且验证了我自己,(…in…)在一维数组上工作。这是偶然的吗?@Jan:它可以用于数组,但它仍然会迭代属性名/索引,而不是值。不过要小心,因为它会迭代所有属性,而不仅仅是索引,包括添加到
    Array.prototype
    的函数。JavaScript的for/in实际上不是为数组设计的,它只是碰巧可以工作(有点)。只是在某个地方发现它可以与数组一起工作,但这里的区别是它不返回值,而是返回索引…Eric,你能链接到W3之外的其他资源吗?提及(…in…
    而不提及
    hasOwnProperty
    是有害的。当它不使用
    forEach
    时,不应将其命名为
    forEach
    。例如:
    arr.forEach(函数(is){is.forEach(函数(his){console.log(his)})做了正确的事情。@cristringfellow我还发现问题的标题有误导性,因为我在寻找有关
    forEach
    循环的信息。那么,这个问题的标题应该是什么呢?
    var person = [];
    person["id"] = 1;
    person["born"] = 2009;
    person["favourite_meal"] = "chicken"; 
    
    var fourth = '';
    for (var arrayIndex in person) {
      fourth += ' ' + person[arrayIndex];
    }