You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何给对象数组指定元素的属性单独赋值?

问题解答

1. 所有元素属性同步修改的原因

Array.prototype.fill()方法接收引用类型参数时,填充到数组每一位的是同一个值的内存引用,而非独立的新对象。
你代码中传入fill的{test_1: 0, test_2: true}是一个单独创建的对象,数组长度为3,三个位置的元素都指向同一个内存地址的对象。修改任意下标元素的属性,本质都是修改同一个对象的值,因此所有元素的对应属性都会同步变更。

2. 仅修改指定元素属性的实现方案

方案一:初始化数组时生成独立对象

放弃直接用fill填充对象,改用Array.from或map批量生成独立的对象实例,保证每个数组元素指向不同的内存地址:

// Array.from 方式,每次回调返回新对象
let data = Array.from({length: 3}, () => ({test_1: 0, test_2: true}));

// 也可以用fill空值后map生成:Array(3).fill().map(() => ({test_1: 0, test_2: true}))

function f(index) {
    data[index].test_1 = 5;
    console.log(data);
}

f(0); // 仅下标0的元素test_1变为5,其余保持原值

方案二:修改时替换为新对象

如果已经用fill生成了数组,修改对应下标元素时通过解构生成新对象替换,避免修改原引用:

let data = Array(3).fill({test_1: 0, test_2: true});

function f(index) {
    // 解构原有属性,覆盖需要修改的字段,生成新对象替换对应位置
    data[index] = {...data[index], test_1: 5};
    console.log(data);
}

f(0);

内容的提问来源于stack exchange,提问作者J.M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 08:45:04