You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript链表转数组:原函数报ReferenceError,求迭代rest或重写方案

链表转数组函数的错误修复方案

错误原因分析

  1. rest未定义报错:你在else if分支里直接使用了rest变量,但这个变量从未声明过,实际要访问的是当前链表节点的rest属性,应该用list.rest或者list[property]来获取。
  2. 逻辑错误:原函数往数组里push的是字符串"value",而不是节点实际的value值(比如10、20),完全不符合需求。
  3. 遍历方式错误:用for...in遍历对象属性的思路不适合处理链表结构,链表是通过rest层层嵌套指向后续节点的,需要逐个遍历每个节点直到rest为null。

正确实现方式

方式一:循环迭代(推荐,避免递归深度限制)

const list = {"value":10,"rest":{"value":20,"rest":null}};

function list_to_array(list) {
  const arr = [];
  let currentNode = list;
  // 循环遍历每个节点,直到当前节点为null
  while (currentNode) {
    arr.push(currentNode.value);
    // 移动到下一个节点
    currentNode = currentNode.rest;
  }
  return arr; // 必须返回数组,原函数遗漏了这一步
}
console.log(JSON.stringify(list_to_array(list))); // 输出 "[10,20]"

方式二:递归实现(代码简洁,适合短链表)

const list = {"value":10,"rest":{"value":20,"rest":null}};

function list_to_array(list) {
  // 当前节点为空时返回空数组
  if (!list) return [];
  // 拼接当前节点的value和后续节点转换的数组
  return [list.value, ...list_to_array(list.rest)];
}
console.log(JSON.stringify(list_to_array(list))); // 输出 "[10,20]"

额外注意点

  • 原函数里的arr没有用const/let声明,会变成全局变量,必须加上声明避免污染全局作用域。
  • 原函数调用时用了list_to_array(x),但定义的链表变量是list,要改成list_to_array(list)才正确。

内容的提问来源于stack exchange,提问作者VOZ ESTOICA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:30:23