我正在阅读Eloquent Javascript by Marijn Haverbeke,我正在研究第4章的obj to array,以及array to obj exercise。数组到obj的解决方案如下:
var list = {value: 1, rest: { value: 2, rest: { value: 3, rest: null}}};
function listToArray(list){
var array = [];
for(var node = list; node; node = node.rest){
array.push(node.value);
}
return array;
}
console.log(listToArray(list));
我对for循环中发生的事情感到困惑。这就是我所理解的:
有人可以用简单的术语来分解这个for循环中发生的事情吗?
答案 0 :(得分:3)
for(var node = list; node; node = node.rest)
第一部分(直到第一部分)意味着;通过将节点设置为列表来初始化节点;
第二部分意味着;保持循环直到节点&#39;一片空白。这是因为第二部分实际上是一个表达式,你经常会看到像i<list.length
这样的东西,但它不必涉及长度,它只需要是一个布尔值,真正意味着继续前进而虚假意味着停止。在Javascript中,您可以只为表达式放置对象变量,它与node!=null
第三部分意味着;在每个循环集节点之后等于node.rest的结果。其中node.rest是另一个可以解决的对象。
所以第一次循环,这就是你得到的
node = {value: 1, rest: { value: 2, rest: { value: 3, rest: null}}}
它会将node.value
(即1)推送到array
。
第二次循环你得到;
node = { value: 2, rest: { value: 3, rest: null}}
它会将node.value
(即2)推送到array
。
依此类推,直到node.rest
为空。