提问人:VOZ ESTOICA 提问时间:9/24/2023 更新时间:9/24/2023 访问量:69
在 javascript 中将数组转换为列表
Convert array to list in javascript
问:
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 而不是另一个对象
答:
1赞
Ori Drori
9/24/2023
#1
若要修复代码,请设置为 的初始值。由于数组具有从 0 开始的索引,因此最后一项的索引比数组长度小 1:i = arr.length - 1
i
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]
10
0
20
1
arr.length
arr[i]
undefined
length - 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));
评论