javascript中不同方法的前置列表

javascript中不同方法的前置列表,javascript,arrays,object,Javascript,Arrays,Object,我将新元素添加到一个对象列表中,每个对象都包含一个变量值和一个变量rest,它的值作为下一个对象。将数组转换为列表的相关代码为: function arrayToList (array) { var obj = { value: array[array.length-1], rest: null } var temp = obj; for (var i = 0; i < array.length-1; ++i) {

我将新元素添加到一个对象列表中,每个对象都包含一个变量值和一个变量rest,它的值作为下一个对象。将数组转换为列表的相关代码为:

function arrayToList (array) {
    var obj = {
        value: array[array.length-1],
        rest: null
    }
    var temp = obj;
    for (var i = 0; i < array.length-1; ++i) {
        var obj = {
            value: array[array.length-2-i],
            rest: temp
        }
        temp = obj;
    }

    return temp;
}

非常感谢

只要把失败的代码改成这个,它就会工作。您可能希望一个新对象的开头不是对旧对象的活动引用

var newObj = {};
newObj.value = val;
newObj.rest = objList;
函数数组列表数组{ var obj={ 值:数组[array.length-1], rest:null } var-temp=obj; 对于变量i=0;iconsole.logprependaraytolistarr,10;瞎猜。newObj.value=值;应为newObj.value=val@谢谢你,我在这里打字时出错了。它仍然不起作用,它使列表中的所有元素的值都与valj相同。为什么要创建一个名为obj的变量,然后立即将其保存到temp中?然后在for循环中创建另一个变量obj?你知道做var-temp=obj;只将对obj变量的引用复制到temp中,它实际上并没有在temp变量中创建新对象?@不,我不知道,我能克服什么this@blundering哦,如果我改变这个变量,它是引用的,它实际上改变了它引用的变量,所以这也在前置函数中产生了问题,我确实工作了,非常感谢,但为什么newObj=objList会导致奇怪的错误?您的答案代码实际上就是我需要的,但现在我很好奇失败的代码var newObj=objList是什么;isdoing@jeea这是因为对象分配不创建对象的副本,而只是引用同一对象,因此您的newObj和newObj.rest是对同一对象的实时引用,如果更改其中一个,则更改另一个。这导致了这种奇怪的行为。您可以尝试使用object.assign{},objList创建该对象的副本,这会起作用,因为它会生成一个对象的副本,而不仅仅是传递一个引用。非常复杂,我认为javascript很简单
var newObj = {};
newObj.value = val;
newObj.rest = objList;