Обращение к индексу в объекте

118
01 мая 2021, 13:00

Заполняю объект определенным значениями, далее обращаюсь к определенному индексу в объекте и меняю ему значение, но меняется значения в индексе к которому обращаюсь и в последнем. Не могу понять в чем проблема?

    var values = {}; 
     
    for (var i = 0; i < 5; i++){ 
        var mins = { 'min' : 0, 'max' : 0 } 
    	mins.min = i; 
        mins.max = i; 
     
    	values[i] = mins; 
    } 
     
    console.log(values); 
     
    mins.min = 10; 
    mins.max = 20; 
     
    values[2] = mins; 
     
    console.log(values); 
 
    // 0: {min: 0, max: 0} 
    // 1: {min: 1, max: 1} 
    // 2: {min: 10, max: 20} 
   // 3: {min: 3, max: 3} 
   // 4: {min: 10, max: 20}

Answer 1

После выполнения цикла переменная mins определена и ссылается на последний объект, затем вы в нем меняете значения и присваиваете этот же объект в массив по второму индексу.

Таким образом второй и пятый элементы массива ссылаются на один и тот же объект

Я бы сделал как-то так :

 var values = {}; 
     
for (var i = 0; i < 5; i++) { 
  values[i] = {min : i, max : i }; 
} 
 
console.log(values); 
 
values[2] = { min : 0, max : 0 }; 
 
console.log(values);

PS: в выводе в консоль результата работы вашего снипета видно что в массиве содержатся ссылки на один и тот же объект

Answer 2

Теперь работает. Не стоит объявлять постоянно новый объект в цикле, объявите его один раз, перед началом цикла.

var values = {}; 
var mins = { 'min' : 0, 'max' : 0 } 
     
for (var i = 0; i < 5; i++){ 
 
  values[i] = { 
    'min': i, 
    'max': i 
  }; 
} 
 
console.log(values); 
 
mins.min = 10; 
mins.max = 20; 
 
values[2] = mins; 
 
console.log(values);

READ ALSO
Как сохранить svg в base64?

Как сохранить svg в base64?

У меня строка содержащая svg тег(не нода)Как мне её сохранить в base64? Данную строку формирует Maker

111
Что хуже, бесконечные таймеры или промисы?

Что хуже, бесконечные таймеры или промисы?

Вопрос по работе движка! Что хуже? Бесконечные таймеры или промисы? И почему? Такой вопрос задали на собеседованииКто может пояснить?

133
Слайдер с изображениями вместо точек навигации

Слайдер с изображениями вместо точек навигации

Существует множество готовых плагинов для создания слайдера-карусели на сайтеНе хочется изобретать велосипед, но ни разу не встречала реализация,...

102