Я делал это упражнение для книги, и он просит написать функцию, которая преобразует массивы в списки (объект со свойствами «value», в котором хранится значение, и «rest», который указывает на следующее значение ).
Вот решение, данное книгой:
function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--)
list = {value: array[i], rest: list};
return list;
}
console.log(arrayToList([10, 20, 30]));
// → {value: 10, rest: {value: 20, rest: {value: 30, rest: null}}}
и вот решение, которое я придумал:
function arrayToList(array){
var list = {value: null, rest: null};
var tempList={value: array[array.length-1], rest: null};
for(var i=array.length-2; i>=0;i--){
list.value = array[i];
list.rest = tempList;
tempList = list;
}
return list;
};
console.log(arrayToList([10, 20, 30]));
Но это дает результат, который выглядит следующим образом:
{value: 10, rest: {value: 10, rest: {value: 10, …}}}
Он работает с массивом из 2 элементов, и все, что выше этого, происходит этот цикл из 10 секунд. Я попытался проанализировать код, чтобы увидеть, где именно это происходит ... похоже, что список назначен для tempList.
Может кто-нибудь объяснить мне, что не так?