Javascript是通过Id链接的两个选项卡构建对象的最有效方法
我从一个API接收到一个带有2个列表的json 在第一个列表中,有具有以下属性的对象:id、名称、类型、标签 对于第二个列表中的对象,属性为:id、名称、顺序。 第二个列表的id指第一个列表的id,可以有多个对象指第一个列表中的单个对象(多对一),但也可能没有(零对一) 我想创建一个具有以下属性的对象:id、名称、类型、标签、选项卡。其中选项卡将包含第二个列表中引用第一个列表的所有对象 最有效的方法是什么 阵列示例: 第一阵列:Javascript是通过Id链接的两个选项卡构建对象的最有效方法,javascript,arrays,list,object,Javascript,Arrays,List,Object,我从一个API接收到一个带有2个列表的json 在第一个列表中,有具有以下属性的对象:id、名称、类型、标签 对于第二个列表中的对象,属性为:id、名称、顺序。 第二个列表的id指第一个列表的id,可以有多个对象指第一个列表中的单个对象(多对一),但也可能没有(零对一) 我想创建一个具有以下属性的对象:id、名称、类型、标签、选项卡。其中选项卡将包含第二个列表中引用第一个列表的所有对象 最有效的方法是什么 阵列示例: 第一阵列: {id : 1, name: 'colors', type: 'l
{id : 1, name: 'colors', type: 'list', label:'xxx'},
{id : 2, name: 'yyy', type: 'date', label:'yyy'},
{id : 3, name: 'dogs', type: 'list', label:'zzz'}
第二阵列:
{id:1, name:'blue', order:1},
{id:1, name:'red', order:2},
{id:1, name:'green', order:3},
{id:3, name:'husky', order:1},
{id:3, name:'bulldog', order:2},
{id:3, name:'dalmatian', order:3}
通缉结果:
{id : 1, name: 'colors', type: 'list', label:'xxx', options: [
{id: 1, name:'blue', order:1},
{id: 1, name:'red', order:2},
{id: 1, name:'green', order:3}]},
{id : 2, name: 'yyy', type: 'date', label:'yyy', tab: []},
{id : 3, name: 'dogs', type: 'list', label:'zzz', options: [
{id: 3, name:'husky', order:1},
{id: 3, name:'bulldog', order:2},
{id: 3, name:'dalmatian', order:3}
]}
试试这个
var m = {};
var arr1 = [{id : 1, name: 'colors', type: 'list', label:'xxx'},
{id : 2, name: 'yyy', type: 'date', label:'yyy'},
{id : 3, name: 'dogs', type: 'list', label:'zzz'}];
var arr2 = [{id:1, name:'blue', order:1},
{id:1, name:'red', order:2},
{id:1, name:'green', order:3},
{id:3, name:'husky', order:1},
{id:3, name:'bulldog', order:2},
{id:3, name:'dalmatian', order:3}];
for(var i=0;i<arr1.length;i++){
arr1[i]["options"] = [];
m[arr1[i]["id"]] = arr1[i];
}
for(var i=0;i<arr2.length;i++){
if(m.hasOwnProperty(arr2[i]["id"])){
m[arr2[i]["id"]]["options"].push(arr2[i]);
}
}
console.log(arr1);
var m={};
var arr1=[{id:1,名称:'colors',类型:'list',标签:'xxx'},
{id:2,名称:'yyy',类型:'date',标签:'yyy'},
{id:3,名称:'dogs',类型:'list',标签:'zzz'}];
var arr2=[{id:1,名称:'blue',顺序:1},
{id:1,名称:'red',顺序:2},
{id:1,名称:'green',顺序:3},
{id:3,姓名:'husky',顺序:1},
{id:3,名字:'bulldog',顺序:2},
{id:3,名称:'dalmatian',顺序:3}];
对于(var i=0;i请添加2个数组的样本首先,当您考虑最有效的方法时,最好从API本身获取整合数据。这样可以减少两个不同rest调用的网络时间。这取决于大小。如果第二个列表很小,您可以将其转换为对象映射索引w使用id,然后在第一个列表上运行map,按id从该对象映射请求对象。如果第二个较大,则可以执行一些记忆功能,从中检索数据。如果可以在服务器端执行,则会更好…@adiga我添加了示例。@SaiKarthik我无法更改API,我希望我可以。我编辑了我的问题,以便您可以看到我所做的期望作为输出。我认为您给出的解决方案只会将两者合并。
var m = {};
var arr1 = [{id : 1, name: 'colors', type: 'list', label:'xxx'},
{id : 2, name: 'yyy', type: 'date', label:'yyy'},
{id : 3, name: 'dogs', type: 'list', label:'zzz'}];
var arr2 = [{id:1, name:'blue', order:1},
{id:1, name:'red', order:2},
{id:1, name:'green', order:3},
{id:3, name:'husky', order:1},
{id:3, name:'bulldog', order:2},
{id:3, name:'dalmatian', order:3}];
for(var i=0;i<arr1.length;i++){
arr1[i]["options"] = [];
m[arr1[i]["id"]] = arr1[i];
}
for(var i=0;i<arr2.length;i++){
if(m.hasOwnProperty(arr2[i]["id"])){
m[arr2[i]["id"]]["options"].push(arr2[i]);
}
}
console.log(arr1);