0

我正在尝试在coffeescript 中学习javascript,并通过在codepen 上重写一些简洁的javascript 来练习。出了点问题,我认为这是由于我不知道如何在咖啡脚本中编写嵌套循环。原始代码是:

for(var j = 0 ; j<yElems;j++){
  for(var i = 0 ; i<xElems;i++){

var elem = document.createElement('div');

if(i%2==0){
  elem.classList.add('bs');
}else{
  elem.classList.add('bs1');
}

elem.style.top = j*30-20+'px';    
elem.style.left = i*30-20+'px';    
elem.style.zIndex =100- j+''+i;
elem.style.backgroundColor = colors[Math.round(Math.random()*4)];
body.appendChild(elem); 
elems.push(elem);
 }
}

我的“翻译”是:

grid = -> 
  for i in xElems
    elem = document.createElement 'div'
    if i % 2 is 0 then elem.classList.add 'bs' else elem.classList.add 'bs1'
    elem.style.top = j*30-20+'px'   
    elem.style.left = i*30-20+'px'    
    elem.style.zIndex = 100- j+''+i
    elem.style.backgroundColor = colors[Math.round(Math.random()*4)]
    body.appendChild(elem)
    elems.push(elem)

for j in yElems
  grid()

不确定什么不起作用。如果不是这样,我仍然不确定。原笔在:

http://codepen.io/pixelgrid/pen/Hxkhs

我的叉子是:

http://codepen.io/bubbaJackson/pen/tyLGC

谢谢。

4

1 回答 1

2
for i in xElems

应该

for i in [0..xElems] by 1

j 循环也应该这样做。

xElems 中的 i 将尝试将 xElems 视为一个数组,并为您提供数组中的每个元素。xElems 似乎是原始 js 中的一个数字,因此您想要迭代一个范围,您可以使用[a..b]符号来完成。请注意,[a..b]将排除 b,而[a...b]将包括 b 的值。

更新

正如mu is too short评论中指出的那样,这基本上直接编译为您试图复制的内容:for(i = 0; i < xElems; ++i)

于 2013-03-07T03:17:03.090 回答