嵌套于..在JavaScript语句中
Nested for...in statements in JavaScript
我正在尝试在Codecademy中学习JavaScript,其中简要提到的一件事是"for in"循环。我在一些练习中使用过它们,但在这种情况下,我无法使其发挥作用。我可以用for(I=blah;etc)来做,但我想知道这个有什么问题,以及是否有办法解决它:
//Your three dimensional array from the last exercise probably
//looked something like this:
var hands = [];
hands[0] = [ [3,"H"], ["A","S"], [1,"D"], ["J","H"], ["Q","D"] ];
hands[1] = [ [9,"C"], [6,"C"], ["K","H"], [3,"C"], ["K","H"] ];
//Loop over every dimension in the array, logging out the suit and rank
//of each card in both hands
//1. loop over each hand
for (var hand in hands) {
//2. loop over each card array in each hand
for (var card in hand) {
//3. loop over each rank/suit array for each card in each hand
for (var prop in card) {
//4. log the value of the rank/suit array item
console.log(card[prop]);
}
}
}
输出为0 0 0,而不是数字和套装。我试着把console.log()放在第一个和第二个循环之后,我注意到它在第一个循环中工作正常,但在第二个中没有。
暂时忽略for-in
问题,您的内部循环应该是这样的。。。
for (var hand in hands) {
for (var card in hands[hand]) {
for (var prop in hands[hand][card]) {
console.log(hands[hand][card][prop]);
}
}
}
请注意,每个内部循环都需要显式引用其外部循环的当前值。您正在对键(in
之前的变量)进行迭代。
为了正确处理数组,您几乎应该始终使用for
循环而不是for-in
。
for (var i = 0; i < hands.length; i++) {
for (var j = 0; j < hands[i].length; j++) {
for (var k = 0; k < hands[i][j].length; k++) {
console.log(hands[i][j][k]);
}
}
}
这有几个原因,你可以在StackOverflow上找到。
为了增加代码的清晰度,您可以将当前项缓存在一个变量中。。。
for (var i = 0; i < hands.length; i++) {
var hand = hands[i]
for (var j = 0; j < hand.length; j++) {
var cards = hand[j];
for (var k = 0; k < cards.length; k++) {
console.log(cards[k]);
}
}
}
不应该在数组上使用for..in
循环,因为它不仅在数组的索引成员上循环,而且在对象的所有属性上循环。相反,您可以使用"传统"for
循环或ECMAScript 5 .forEach
var hand, card, prop, h, c, p;
for (h = 0; h < hands.length; ++h) {
hand = hands[h];
for (c = 0; c < hand.length; ++c) {
card = hand[c];
for (p = 0; p < card.length; ++p) {
prop = card[p];
console.log(prop);
}
}
}
有一些较短的方法可以完成上述操作,但这是一种基本且可读的方法。
相关文章:
- 这个函数做什么以及如何在没有'带有'语句-Javascript
- 使用usinf-if语句javascript调用函数
- 不带花括号的If/else语句javascript
- 我怎样才能减少 if/else 语句 Javascript
- 如果其他语句 JavaScript
- 带有返回语句 JavaScript 的三元运算符
- 代码将同时执行 if 和 else 语句.Javascript
- 如果 else 语句 JavaScript
- 短音if/else语句Javascript
- 如何使用if语句javascript使游戏保存最佳分数
- 使用事件onclick访问if语句Javascript中变量的值
- "返回函数外的语句“-JavaScript错误
- 在for循环中使用if语句-Javascript
- if语句返回true,而不是遍历我的所有if语句-javascript
- 我可以't使用if语句(javascript)打印html选择菜单中的值
- 返回语句javascript
- 如何循环if/else语句(JavaScript)
- 如何在HTML中使用if语句(JavaScript)和select标记
- 多个if条件语句javascript/html
- 切换语句javascript