如何在JavaScript中为对象数组中仅特定元素的属性赋值?
我有一个对象数组,并使用如何在JavaScript中为对象数组中仅特定元素的属性赋值?,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组,并使用array.prototype.fill()指定了它们的属性和值。我想为数组中特定元素的属性指定一个新值 例如: let data = Array(3).fill({test_1: 0, test_2: true}); function f(index) { data[index].test_1 = 5; console.log(data); } f(0); 但是,不是将该值指定给该特定对象的属性,而是阵列中的所有对象都将其自己的属性指定为相同的值
array.prototype.fill()
指定了它们的属性和值。我想为数组中特定元素的属性指定一个新值
例如:
let data = Array(3).fill({test_1: 0, test_2: true});
function f(index) {
data[index].test_1 = 5;
console.log(data);
}
f(0);
但是,不是将该值指定给该特定对象的属性,而是阵列中的所有对象都将其自己的属性指定为相同的值
以下是输出:
// Actual result
[
{
test_1: 5,
test_2: true
},
{
test_1: 5,
test_2: true
},
{
test_1: 5,
test_2: true
}
];
// Expected result
[
{
test_1: 5,
test_2: true
},
{
test_1: 0,
test_2: true
},
{
test_1: 0,
test_2: true
}
];
所有三个对象的test_1
属性值均为5,而不是仅第一个对象的test_1
属性值为5
因此,我的问题是:
- 为什么
将相同的值分配给数组中所有元素的相同属性f()
- 如何仅为数组的特定元素的属性赋值
数组。除非您想用基元类型填充它,否则请填充
通过这个let data=Array(3).fill({test_1:0,test_2:true})
您每次都传递相同的对象,因此您的数组包含相同对象的3倍,那么如果您修改数组的任何元素,实际上它是通过引用修改的相同对象。为了避免这种情况,请使用Array.from
语法并结合map回调。像这样:
let data=Array.from({length:3},{=>({test_1:0,test_2:true}))
函数f(索引){
数据[索引]。测试_1=5;
控制台日志(数据);
}
f(0)
。作为控制台包装{max height:100%!important;top:0;}
由于每个人都指向内存中的同一地址,其中一个地址的更改也会导致其他地址的更改
这应该起作用:
let data=[…数组(3)].map(()=>({test_1:0,test_2:true}));
函数f(索引){
数据[索引]。测试_1=5;
控制台日志(数据);
}
f(0)
您正在将一个对象传递给fill
,因此fill
将在每个索引处放置该对象。它们都是对您创建的唯一对象的引用“所有三个对象的值都是5”-不,只有一个对象。