将2个api响应的结果合并到一个javascript数组中

将2个api响应的结果合并到一个javascript数组中,javascript,arrays,ajax,Javascript,Arrays,Ajax,我有两个不同的api响应,我想结合。第一个api响应如下所示 "Data1":[ { "name": "First Officer", "status": "ACTIVE", "id": "111" }, { "name": "Second Officer", "status": "DELETED", "id": "222" }, { "name": "Third Officer", "st

我有两个不同的api响应,我想结合。第一个api响应如下所示

"Data1":[ 
   {
    "name": "First Officer",
    "status": "ACTIVE",
    "id": "111"
   },
   {
     "name": "Second Officer",
     "status": "DELETED",
     "id": "222"
   },
   {
     "name": "Third Officer",
     "status": "ACTIVE",
     "id": "333"
   }
 ],
 Data2[],
 Data3[]
 [
   {
    "id": "111",
    "latest_position": "Elm Street"
   },
   {
     "id": "333",
     "latest_position": "Newton Sr. Street"
   }
 ]
第二个反应是获得官员的最新职位,如下所示

"Data1":[ 
   {
    "name": "First Officer",
    "status": "ACTIVE",
    "id": "111"
   },
   {
     "name": "Second Officer",
     "status": "DELETED",
     "id": "222"
   },
   {
     "name": "Third Officer",
     "status": "ACTIVE",
     "id": "333"
   }
 ],
 Data2[],
 Data3[]
 [
   {
    "id": "111",
    "latest_position": "Elm Street"
   },
   {
     "id": "333",
     "latest_position": "Newton Sr. Street"
   }
 ]
我需要将上面API的两个响应组合成这样的一个数组

["111","First Officer","Elm Street"]
["333", "Third Officer","Newton Sr. Street"]
但我得到的是数据

 ["333","Third Officer","Elm Street"]
 ["333", "Third Officer","Newton Sr. Street"]
你知道我下面代码的错误在哪里吗

$.ajax({
    url: api_url+'search?keyword='+keyword,
    type: 'GET',
    success: function(response) {
        //console.log(response);
        var keys = Object.keys(response.data);
        for (var i = 0; i < keys.length; i++) {
            var data = response.data[keys[i]]
            for (var j = 0; j < data.length; j++) {
                var name = data[j].name;
                var sid = data[j].id;
            $.ajax({
                    url: api_url+'positions?filter=%7B%22where%22%3A%7B%22user_id'+sid,
                    type: 'GET',
                    success: function(response2) {
                        //console.log(response);
                        for (var i = 0; i < response2.length; i++) {
                            var loc = response2[i].latest_position;
                            var obj = {
                                'id' : sid,
                                'name' : name,
                                'loc' : loc,

                            };

                            arrObj.push(obj);

                        }
                    }
                })
            }
        }


        console.log(arrObj);
谢谢你

你可以用它按id从第二个响应中搜索项目

大概是这样的:

常数响应1=[{ 姓名:大副, 状态:活动, 身份证号码:111 }, { 姓名:二副, 状态:已删除, 身份证号码:222 }, { 姓名:三副, 状态:活动, 身份证号码:333 } ]; 常数响应2=[{ id:111, 最新职位:榆树街 }, { id:333, 最新职位:老牛顿街 } ]; const merged=response2.mapitem=>{ const resp1Item=response1.findr=>r.id==item.id; 返回{…项, …响应项 } };
console.logmerged 您的问题源于第二个$.ajax。。。调用是异步的,当它的成功:callback得到评估时,for就完成了,所以您将从所有响应中的数组中获得最后的值

解决方案是围绕第二个$.ajax….创建一个。。。。调用,因此它将使定义上下文在执行时可用

围绕以下几行:

$.ajax({
    url: api_url+'search?keyword='+keyword,
    type: 'GET',
    success: function(response) {
        //console.log(response);
        var keys = Object.keys(response.data);
        for (var i = 0; i < keys.length; i++) {
            var data = response.data[keys[i]]
            for (var j = 0; j < data.length; j++) {
        (function(data){
                var name = data.name;
                var sid = data.id;

            $.ajax({
                    url: api_url+'positions?filter=%7B%22where%22%3A%7B%22user_id'+sid,
                    type: 'GET',
                    success: function(response2) {
                        //console.log(response);
                        for (var i = 0; i < response2.length; i++) {
                            var loc = response2[i].latest_position;
                            var obj = {
                                'id' : sid,
                                'name' : name,
                                'loc' : loc,

                            };

                            arrObj.push(obj);

                        }
                    }
                })
              })(data[j]);
            }
        }


        console.log(arrObj);

你好@felixmosh,谢谢你的提示,现在我找到了正确的方法