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

如何使用jQuery或原生JS动态为JS对象设置动态键名并赋值?

动态设置对象键名问题修复

需求

现有空对象需要动态写入键值对,目标userData结构参考:

userData = {
  programmer: "Jeff",
  designer: "Obama",
  CEO: "Elon Musk"
}

问题复现

原有实现代码:

var userData = {};
var allData = [];

$('input[type="text"]').on("input", function (e) {
    var getBtn = $("#text-label").attr('text-label');
    var inputValue = e.target.value;
    userData.getBtn = inputValue;
    allData.push(userData)
    console.log(allData)
})

实际控制台输出:

[{
  getBtn: "Jim"
}]

预期输出:

[{
  designer: "Jim"
}]

错误原因

使用点语法userData.getBtn赋值时,JS会直接将getBtn识别为固定字符串键名,不会解析getBtn变量中存储的动态值,因此生成的键名永远是固定的getBtn,无法匹配动态获取到的designer/programmer/CEO这类实际业务键名。
另外原有代码每次触发输入事件都将全局同一个userData对象的引用push进数组,会导致数组内所有项的值同步跟随最后一次输入变化,存在引用污染问题。

修复代码

将点语法赋值替换为方括号语法赋值,方括号内传入存储键名的变量即可实现动态键名设置;每次入组时新建独立对象,避免引用问题:

var userData = {};
var allData = [];

$('input[type="text"]').on("input", function (e) {
    var dynamicKey = $("#text-label").attr('text-label');
    var inputValue = e.target.value;
    // 方括号语法支持动态解析变量作为键名
    userData[dynamicKey] = inputValue;
    // 浅拷贝生成新对象入组,避免引用同一对象导致的值联动问题
    allData.push({...userData});
    console.log(allData)
})

注:如果不需要保留每次输入的历史快照,仅需存储最新的完整userData对象,可以去掉push逻辑,直接在更新对象后打印即可。

内容的提问来源于stack exchange,提问作者The Dead Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:06:25