Я пытаюсь console.log значение массива через серию процессов.Это для отладки, но также чтобы помочь мне увидеть, как методы javascript изменяют ссылочные типы, такие как массивы и объекты.
В этой ситуации я записываю значение объекта в массив, который также находится в объекте массива:
Пример модели:
{key: '1234', class: 'Math 10', fname: 'john', lname: 'doe',
homework: [
{key: '123', check: 'yes'},
{key: '12356', check: 'no'},
{key: '12356789', check: 'na'},
]
},
Я пытаюсь изменить значение 'check' в каждом объекте домашней работы.
Проблема / путаница
Когда консоль регистрирует объект домашней работы, чтобы отслеживать значение 'check', пока я пишу свой код, в тот момент, когда я изменяю значение 'check', все предыдущие журналы консоли показывают это новое значение.
Как это возможно, если я установил значение в точный момент времени?Я думал, что это как-то связано со ссылочными типами, но я использовал метод slice, чтобы убедиться, что копирую массив.
const value = event.target.getAttribute("data-value");
console.log("data-value is = ", value);
const studentKey = event.target.getAttribute("data-studentkey");
console.log("student key is = ", studentKey);
const selectedHomeworkKey = this.state.selectedHomework;
console.log("Seleted Homework Key is ", selectedHomeworkKey);
const students = this.state.students.slice();
console.log("state says students are", students);
const selectedStudents = students.filter((student)=>{
return( student.key === studentKey);
})
console.log("After filter, students is ", selectedStudents);
const nonSelectedStudents = students.filter((student)=>{
return( student.key !== studentKey);
})
console.log("Non selected students are ", nonSelectedStudents);
const homeworkArray = selectedStudents[0].homework.slice();
console.log("homework of the selected student is ", homeworkArray);
const selectedHomework = homeworkArray.filter((homework) => {
return (homework.key === selectedHomeworkKey);
})
console.log("selected homework for selected student is ", selectedHomework);
let updatedHomework = selectedHomework.slice();
console.log("updated homework before update is", updatedHomework)
updatedHomework[0].check = value;
console.log("updated homework after update is", updatedHomework)
![enter image description here](https://i.stack.imgur.com/VwFd4.png)
Вопрос
Почему значение check 'yes' отображается во всех предыдущих файлах console.logs, хотя оно должно отображаться только в последнем файле console.log?