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

JavaScript中如何构建指定格式对象?现有代码失效求助

解决JavaScript构建邮箱-用户名映射对象的问题

你的代码核心问题出在对象属性名的定义方式上:let selectNewData = {eMail : userName};这一行里,eMail会被当作字面量字符串作为属性名,而不是你定义的变量值,导致每次循环都在覆盖同一个名为"eMail"的键,自然得不到你想要的邮箱-用户名映射结构。

下面是几种修正方案:

方案1:直接赋值(最直观)

跳过Object.assign,直接用方括号语法把变量作为属性名赋值:

$.ajax({
    method: "POST",
    url: "php/somescript.php",
    data: {"email": "some_email@gmail.com"},
}).done(function( data ) {
        var result = $.parseJSON(data);
        // 初始化空对象,不需要{null: null}(除非你确实需要这个键)
        let select1Data = {};
        // 额外判断是否为数组,避免非数组场景报错
        if (result!== null && Array.isArray(result)){
                for(var i=0; i<result.length; i++){
                        // 用const/let声明变量,避免全局污染
                        const userName = result[i].imie + " " + result[i].nazwisko;
                        const eMail = result[i].email;
                        // 方括号语法:把变量值作为属性名
                        select1Data[eMail] = userName;
                };
        }
        // 这里可以使用最终的select1Data
        console.log(select1Data);
});

方案2:用计算属性名配合Object.assign

如果坚持用Object.assign,需要用ES6的计算属性名语法,把变量包裹在方括号里:

$.ajax({
    method: "POST",
    url: "php/somescript.php",
    data: {"email": "some_email@gmail.com"},
}).done(function( data ) {
        var result = $.parseJSON(data);
        let select1Data = {};
        if (result!== null && Array.isArray(result)){
                var len = result.length;
                for(var i=0; i<len; i++){
                        const userName = result[i].imie + " " + result[i].nazwisko;
                        const eMail = result[i].email;
                        // 计算属性名:[eMail]会把变量值作为键
                        let selectNewData = {[eMail] : userName};
                        Object.assign(select1Data, selectNewData);
                };
        }
        console.log(select1Data);
});

方案3:用Array.reduce简化代码

用数组的reduce方法可以更简洁地把数组转换成目标对象:

$.ajax({
    method: "POST",
    url: "php/somescript.php",
    data: {"email": "some_email@gmail.com"},
}).done(function( data ) {
        var result = $.parseJSON(data);
        let select1Data = {};
        if (result!== null && Array.isArray(result)){
                select1Data = result.reduce((acc, item) => {
                        const userName = `${item.imie} ${item.nazwisko}`;
                        acc[item.email] = userName;
                        return acc;
                }, {});
        }
        console.log(select1Data);
});

额外注意事项

  • 变量userName和eMail建议用const或let声明,避免成为全局变量
  • 如果不需要初始的null: null键,直接初始化空对象{}即可
  • 增加Array.isArray(result)判断,避免非数组数据导致循环报错

内容的提问来源于stack exchange,提问作者bzc0fq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:50:30