我正在尝试在Codecademy中学习JavaScript,其中一个简单的提到是"for in"循环.我在一些练习中使用过它们,但在这种情况下,我无法让它工作.我可以用(i =等等;等等),但我想知道这有什么问题,如果有办法解决它:
//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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出为0 0 0,而不是数字和套装.我尝试在第一个和第二个循环之后放置console.log(),我注意到它在第一个循环中正常工作,但在第二个循环中没有正常工作.
小智 10
暂时忽略这个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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,每个内部循环都需要显式引用其外部循环的当前值.您正在迭代密钥(之前的变量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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这有几个原因,您可以在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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)