是'for'循环所以内存饥饿,与es6中的'for'相比?

时间:2017-07-19 15:32:01

标签: javascript ecmascript-6

在Javascript中,循环,所以内存密集吗?我得到一个内存问题,它应该只循环36次:

const suits = ['♥', '♠', '♣', '♦'],
      ranks = [6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'];
var cards = [];
for (let i = 0; i < suits.length; i++) {
  for (let j = 0; j < ranks.length; i++) {
    var colour = 'black';
    if (suits[i] === '&hearts;' || suits[i] === '&diam;') {
      colour = 'red';
    }
    cards.push({
      suit : suits[i],
      rank : ranks[j],
      colour : colour,
      value : j+1
    });              
  }
}
console.log(cards);

https://jsfiddle.net/xntL1ygj/

但这很好:

const suits = ['&hearts;', '&spades;', '&clubs;', '&diams;'],
      ranks = [6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'];

let cards = [];

for (let suit of suits) {
  for (let rank of ranks) {
    var colour = 'black';
    if (suit === '&hearts;' || suit === '&diam;') {
      colour = 'red';
    }  
    cards.push({
      suit : suit,
      rank : rank,
      colour : colour,
      //value : j+1
    });              
  }
}
console.log(cards);

https://jsfiddle.net/zfktu35t/

1 个答案:

答案 0 :(得分:1)

const suits = ['&hearts;', '&spades;', '&clubs;', '&diams;'],
      ranks = [6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'];
var cards = [];
for (let i = 0; i < suits.length; i++) {
  // I fixed your bug below--it used to be i++, not j++
  for (let j = 0; j < ranks.length; j++) { 
    var colour = 'black';
    if (suits[i] === '&hearts;' || suits[i] === '&diam;') {
      colour = 'red';
    }
    cards.push({
      suit : suits[i],
      rank : ranks[j],
      colour : colour,
      value : j+1
    });              
  }
}
console.log(cards);

嗯,你看,当你

let j = 0; j < ranks.length; i++) 

该循环永远运行,因为j始终为0.很有趣,那就是。