有口才的Java练习的麻烦。任务是从数组中创建列表。
该列表如下所示:
var list = {
value: 1,
rest: {
value: 2,
rest: {
value: 3,
rest: null
}
}
};
该网站上的解决方案的书是:
function arrayToList(array)
{
var list = null;
for (var i = array.length-1; i>=0; i--) {
list = {value: array[i], rest: list};
}
return list;
}
我了解它是如何工作的,但不知道为什么。就像我想象的那样,循环将重写列表对象,而其rest属性将指向包含它的对象。有人可以向我解释它的工作原理和作用吗?
我也在浏览器(Firefox 33)中尝试过该解决方案,并console.log(arrayToList([10,20]))
打印出“ undefined”
它始于数组的末尾,每次都将先前的结果包装到一个新对象中,这意味着结构越来越深。
尽管它循环遍历数组 [1,2,3]
第一个循环:
i = 2
array[2] is 3
list = {value: 3, rest: null}
第二:
i = 1
array[1] is 2
list = {value: 2, rest: {value: 3, rest: null}}
第三也是最后一个:
i = 0
array[0] is 1
list = {value: 1, rest: {value: 2, rest: {value: 3, rest: null}}}
至于打印undefined
,我不明白为什么,但这可行:
function arrayToList(array)
{
var list = null;
for (var i = array.length-1; i>=0; i--) {
list = {value: array[i], rest: list};
}
return list;
}
$('#A').html(JSON.stringify(arrayToList([1, 2, 3])));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="A">test</div>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句