下面的练习基于《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]
最佳答案
是的,你是对的,条件是节点
。但这就像
if (node) {
doSomething();
}
它检查node
是否“已定义”(而不是未定义
或null
)
让我们一步一步地完成这个示例:
node = {value: 10, rest: {value: 20, rest: null}}
和10
(value
) 被推送到数组
node = {value: 20, rest: null}
,因为新node
是旧节点的
;rest
20
被推送到array
node = null
→ 由于条件 (node === undefined
) 未满足而停止
关于javascript - 我不明白: for (var node = list; node; node = node.其余的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645736/