javascript - 我不明白: for (var node = list; node; node = node.其余的)

标签 javascript

下面的练习基于《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)

让我们一步一步地完成这个示例:

  1. node = {value: 10, rest: {value: 20, rest: null}}10 (value) 被推送到数组
  2. node = {value: 20, rest: null},因为新 node 是旧 节点的 rest ; 20 被推送到 array
  3. node = null → 由于条件 (node === undefined) 未满足而停止

关于javascript - 我不明白: for (var node = list; node; node = node.其余的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645736/

相关文章:

javascript - 覆盖 angularjs 函数 $http.get

javascript - 如果复选框默认选中,setInterval 并执行某些操作,如果未选中,则 clearInterval

javascript - 无法使用javascript在数组中获取选择查询的结果

javascript - 如何使用javascript使视频结束后跳回开头?

javascript - 我想仅在reactjs中更改单击按钮(onClick)的变体或背景。我怎样才能实现它?

javascript - ajax PHP MySQL 查询

javascript - 单击按钮使用angularjs将文本复制到另一个div

javascript - setinterval 不在整个应用程序中更新/刷新 - Node.js

javascript - 从链接修改指令模板内的 ng-show

JavaScript - 如何使用 reduce 将名称列表映射到指定键