javascript foreach如何处理多维数组?
我玩了一点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]; }
<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中的一个对象,因此您可以使用它迭代数组。但速度较慢,一般不建议使用(请参阅)循环解决
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];
}