【发布时间】:2020-06-29 19:52:52
【问题描述】:
下面的练习基于“Eloquent Javascript”一书。 listToArray 函数接受一个链表(或一组嵌套的对象)作为参数。我无法想象这个函数中的 for 循环是如何工作的。为什么条件只是“节点”?
function arrayToList(array) {
var list = null;
for (let i = array.length - 1; i >= 0; i--) {
list = {
value: array[i],
rest: list
};
}
return list;
}
function listToArray(list) {
var array = [];
for (let node = list; node; node = node.rest) {
array.push(node.value);
}
return array;
}
console.log(arrayToList([10, 20]));
// → {value: 10, rest: {value: 20, rest: null}}
console.log(listToArray(arrayToList([10, 20, 30])));
// → [10, 20, 30]
【问题讨论】:
-
条件在
node为真时运行。一旦node.rest为假,循环结束。 -
for的第二部分是要测试的条件,以查看是否应该执行循环的另一次迭代。当使用单个值时(此处为node),它只计算变量并将其转换为布尔值。如果结果是true,则循环再次进行。如果false没有 -
在这种情况下,将
node作为条件与写node != null基本相同。 -
@Lain 你写了“truesy”。
标签: javascript