js循环和对象数组的问题
problem with js loops and array of objects
我对 js 循环及其实际工作方式有疑问。我正在遍历一组如下所示的对象:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
循环只更新每个元素的值:
array.forEach(el => {
el.value = 1;
console.log(array)
})
我不明白的是为什么输出看起来像这样:
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
而不是这样:
[{value: 1}, {value: 0}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
我错过了什么?
我猜您正在尝试查看 Chrome 上开发工具的输出,而在开发工具上,您看到了对数组的引用。这意味着在执行结束时,所有项目的值都为 1,因此开发工具会显示对数组的相同引用。
要查看执行时的实际值(而不是参考值),请像这样使用 JSON.stringify
:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
array.forEach(el => {
el.value = 1;
console.log(JSON.stringify(array))
});
我对 js 循环及其实际工作方式有疑问。我正在遍历一组如下所示的对象:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
循环只更新每个元素的值:
array.forEach(el => {
el.value = 1;
console.log(array)
})
我不明白的是为什么输出看起来像这样:
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
而不是这样:
[{value: 1}, {value: 0}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 0}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: 0}]
[{value: 1}, {value: 1}, {value: 1}, {value: 1}]
我错过了什么?
我猜您正在尝试查看 Chrome 上开发工具的输出,而在开发工具上,您看到了对数组的引用。这意味着在执行结束时,所有项目的值都为 1,因此开发工具会显示对数组的相同引用。
要查看执行时的实际值(而不是参考值),请像这样使用 JSON.stringify
:
const array = [{value: 0}, {value: 0}, {value: 0}, {value: 0}];
array.forEach(el => {
el.value = 1;
console.log(JSON.stringify(array))
});