2016-08-16 75 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