function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--) //How to implement it if i = 0?
list = {value: array[i], rest: list};
return list;
}

arr.reverse - 不是报价。我很好奇如果我们从数组[0]中逐步执行数组怎么办呢?或者只有当我们向后跨越数组时才能完成JS中的这个任务?
答案 0 :(得分:1)
您可以缩小对象并在末尾分配null
。
function arrayToList(array) {
var list = {};
array.reduce((o, v, i, a) => (o.value = v, o.rest = i + 1 === a.length ? null : {}), list);
return list;
}
console.log(arrayToList([4, 5, 6, 7]));

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)
你可以在没有循环的情况下使用递归代替。
function arrayToListRecursive(arr) {
return (!arr.length)
? null
: {
value: arr[0],
rest: arrayToListRecursive(arr.slice(1))
}
}
function arrayToListLoop(arr) {
let list = null;
for (let i = 1; i <= arr.length; i++) {
list = { value: arr[arr.length - i], rest: list };
}
return list
}
console.log(
arrayToListRecursive([1, 2, 3, 4])
)
console.log(
arrayToListLoop([1, 2, 3, 4])
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
答案 2 :(得分:1)
技巧是为列表头和当前节点使用两个单独的指针:
function arrayToList(a) {
var list = {}, p = list;
for (let x of a) {
p.value = x;
p.rest = {};
p = p.rest;
}
return list;
}
console.log(arrayToList([11,22,33]))
要使最后一个指针无效,你需要三个指针:
function arrayToList(a) {
var list = {}, p = list, q;
for (let x of a) {
p.value = x;
p.rest = {};
q = p;
p = p.rest;
}
q.rest = null;
return list;
}