将2个api响应的结果合并到一个javascript数组中
我有两个不同的api响应,我想结合。第一个api响应如下所示将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
"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,谢谢你的提示,现在我找到了正确的方法