Javascript 从数组中生成列表
在训练中遇到困难。任务是从数组中创建一个列表 列表如下所示:Javascript 从数组中生成列表,javascript,Javascript,在训练中遇到困难。任务是从数组中创建一个列表 列表如下所示: 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--) {
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;
}
我知道它是怎么工作的,但不明白为什么。正如我想象的那样,循环将重写list对象,而其rest属性将指向包含它的对象。有人能解释一下它是如何工作的吗
我也在我的浏览器(Firefox 33)和console.log(arrayToList([10,20])中尝试过这个解决方案。打印出“未定义”它从数组末尾开始,每次都将以前的结果包装在一个新对象中,这意味着结构越来越深 对数组进行逐圈遍历
[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}}}
至于打印未定义的,
,我不明白为什么,但这是可行的:
函数数组列表(数组)
{
var list=null;
对于(var i=array.length-1;i>=0;i--){
list={value:array[i],rest:list};
}
退货清单;
}
$('#A').html(JSON.stringify(arrayToList([1,2,3]))代码>
test
是的,我理解了这些步骤是如何工作的,以及对象是如何指向彼此的,但是为什么每次都会创建一个新的列表对象,而现有的列表会被放入rest属性中,而不是现有表达式被新表达式覆盖?因为赋值的整个右侧表达式是在实际赋值给左侧变量之前计算/执行的。因此,在构造新对象时,旧对象未被触及,因此可以在构造过程中使用它的值;a=1+a代码>a
在此之后将为2,其值在计算右侧之前不会更改。列表
是相同的,我们没有编辑列表
,我们正在更改它的引用。也就是说,它是对{value:3,rest:null}
的引用,现在它是对一个新对象{value:2,rest:{value:3,rest:null}
的引用。希望帮助SSO,您是说创建了第一个{value:array[i],rest:list}
对象,并将上一个列表放在rest属性中吗?然后才创建一个指向对象的新列表变量?几乎,除了没有新的列表变量。只有一个变量,它会更新以引用新对象。