2016-08-16 51 views
-1

我正在学习如何在JavaScript中使用对象,如下面的代码。javascript中的对象引用

let arr1 = [1, 2, 3]; 
let arr2 = [4, 5, 6]; 
let arr3 = [10]; 
let arr4 = [...arr1, ...arr2, ...[7,8,9], ...arr3]; 

function myFunc() { 
    let result = 0; 
    let obj = {}; 
    let arr = []; 
    for (let value of arguments) { 
     result += value; 
     obj.keys = value; 
     arr.push(obj); 
    } 
    return [result, arr]; 
} 

console.log(myFunc(...arr4)[0]); 
console.log(myFunc(...arr4)[1]); 

我期待这样的结果; [ { keys: 1 }, { keys: 2 }, { keys: 3 }, { keys: 4 }, { keys: 5 }, { keys: 6 }, { keys: 7 }, { keys: 8 }, { keys: 9 }, { keys: 10 } ]

但结果是这样的: 55 [ { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 }, { keys: 10 } ]

我想这是一个参考的问题。最后的'值'是10,所以所有的值都改变了10.我明白了,但是我无法修复这个错误。我怎样才能获得我想要的结果?

回答

2

您应该创建obj变量在循环内,否则你继续使用相同的对象每次迭代:

function myFunc() { 
    let result = 0; 
    let arr = []; 
    for (let value of arguments) { 
     let obj = {}; 
     result += value; 
     obj.keys = value; 
     arr.push(obj); 
    } 
    return [result, arr]; 
} 
+0

非常感谢您!现在我明白了。 – BlueFlag

0

您在for循环之前创建单个对象,然后每次绕过循环时修改其keys属性。

您需要在每次循环时创建一个新对象。

移动的代码,创建它所以它是在循环内的行。

0

使用循环像

var myStringArray = ["Hello","World"]; 
 
var arrayLength = myStringArray.length; 
 
for (var i = 0; i < arrayLength; i++) { 
 
    alert(myStringArray[i]); 
 
    //Do something 
 
}

0

你是在循环中操纵相同的对象obj,并将其推入10次。最终arr中的所有元素都指向相同的对象。

尝试声明obj内循环,或者干脆arr.push({keys: value})

0

“arr.push(obj);”在你的情况下添加相同obj对象很多次,你必须初始化它在循环中:

for (let value of arguments) { result += value; let obj = {keys: value}; arr.push(obj); }

+0

你说得对。我做了很多次obj对象,我没有意识到。谢谢。 – BlueFlag