在 javascript 中将数组转换为列表

Convert array to list in javascript

提问人:VOZ ESTOICA 提问时间:9/24/2023 更新时间:9/24/2023 访问量:69

问:

function array_to_list(arr) {
  list = null

  for (i = arr.length; i >= 0; i--) {
    list = { value: arr[i], rest: list };
  }

  return list;
}
x = array_to_list([10, 20]);
console.log(JSON.stringify(x));

我得到的输出是:

{"value":10,"rest":{"value":20,"rest":{"rest":null}}}

但我想要

{value: 10, rest: {value: 20, rest: null}}

我该如何解决这个问题?也就是说,将最后一个 rest 更改为 null 而不是另一个对象

JavaScript 数组 列表 对象

评论


答:

1赞 Ori Drori 9/24/2023 #1

若要修复代码,请设置为 的初始值。由于数组具有从 0 开始的索引,因此最后一项的索引比数组长度小 1:i = arr.length - 1i

function array_to_list(arr) {
  let rest = null

  for (let i = arr.length - 1; i >= 0; i--) {
    rest = { value: arr[i], rest };
  }

  return rest;
}

const result = array_to_list([10, 20]);
console.log(JSON.stringify(result));

我将使用 Array.reduceRight() 从末尾迭代列表,并将初始值设置为:null

const array_to_list = arr =>
  arr.reduceRight((rest, value) => ({
    value,
    rest
  }), null)

const result = array_to_list([10, 20]);
console.log(JSON.stringify(result));

评论

0赞 VOZ ESTOICA 9/24/2023
我怎样才能把arr.reduceright放在我的函数中?
0赞 Ori Drori 9/24/2023
你不需要把它放在你自己的函数中。只需使用 ansewr 中的函数即可。我为您的代码添加了一个修复程序。
0赞 VOZ ESTOICA 9/24/2023
哪一个更有效率?在 O(n) 复杂度中
0赞 Ori Drori 9/24/2023
两者都具有相同的大 O 复杂度 - O(n)。如果数组中的元素不超过 10,000 个,您可能不会感觉到有什么不同。如果这样做,for 循环会稍微快一些。更具可读性。reduceRight
0赞 Ori Drori 9/24/2023
不客气:)
1赞 UncleDave 9/24/2023 #2

数组索引是从 0 开始的,因此给定数组的索引为 为 和 的索引为 ,但您的循环从 开始,即 2,因此第一个计算结果为 to,循环的运行时间比应有的多一次。向后遍历数组时,通常应从 开始。[10, 20]100201arr.lengtharr[i]undefinedlength - 1

function array_to_list(arr) {
  list = null

  for (i = arr.length - 1; i >= 0; i--) {
    list = { value: arr[i], rest: list };
  }

  return list;
}
x = array_to_list([10, 20]);
console.log(JSON.stringify(x));