循环练习

时间:2017-02-27 21:22:25

标签: javascript arrays object

我正在阅读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循环中发生的事情感到困惑。这就是我所理解的:

  1. 变量节点等于列表对象
  2. 长度等于与列表对象相同的节点
  3. 和node等于值rest
  4. 有人可以用简单的术语来分解这个for循环中发生的事情吗?

1 个答案:

答案 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为空。