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

使用jQuery合并数组对象,将Ids设为键、Name设为值重构结构

问题解决:将数组对象按键合并为单对象结构

原代码

var IDs  = {};
$.ajax({
    url: url,
    type: 'GET',
    data: { 
        type: "json",
        requestUrl: "requestUrl",
        requestWorkflow: "requestWorkflow",
        directReply: true

    },
    dataType: 'json',
    success: function( data, textStatus, jQxhr ) {
     console.log(data);
            IDs= data;
            
    },
    error: function(jqXhr, textStatus, errorThrown){
        alert( "something went wrong, please try again: " + errorThrown );
    },
}); 

console.log(IDs[0]); 

输入数据格式

[0:{Ids: "6",Name: "Michael"}, 1:{Ids: "7",Name: "Gerald"}, 2:{Ids: "8",Name: "Rose"}, 3:{Ids: "9",Name: "Graice"}]

期望输出格式

[0:{"6":"Michael","7":"Gerald","8":"Rose","9":"Graice"}]

解决方案

首先要注意:你写的console.log(IDs[0])会输出undefined,因为AJAX是异步操作,外部的log会在请求完成前执行,处理数据的逻辑必须放在success回调内。

要把数组转换为目标结构,可以用Array.reduce()遍历数组,将每个对象的Ids作为键、Name作为值合并到新对象中,最后把这个对象存入数组即可:

修改后的success回调代码:

success: function( data, textStatus, jQxhr ) {
    console.log(data);
    // 合并数组对象为单对象
    const mergedObj = data.reduce((acc, item) => {
        acc[item.Ids] = item.Name;
        return acc;
    }, {});
    // 封装成期望的数组格式
    IDs = [mergedObj];
    console.log(IDs[0]); // 此处可正确输出合并后的对象
},

如果你的环境支持ES6+,也可以用更简洁的写法:

const mergedObj = Object.fromEntries(data.map(item => [item.Ids, item.Name]));
IDs = [mergedObj];

另外,建议把IDs的初始值改为[],因为最终它是数组类型,语义更准确:

var IDs = [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:15:46