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

Смежные вопросы