我需要使用Id来检测数组中的对象。
我的第一个数组看起来像这样:
{ [id: 9, name: 'abc'], [id: 2, name 'def'], [id: 40, name: 'gh'] } (Id & name)
,
而其他数组是:
{ [class: 'physics', Tid: 9], [class: 'computer science', Tid: 9], [class: 'Biology', Tid: 40] }.
我需要将第一个数组中的参数“name
”与其“class
”匹配(例如,"physics"
与Tid=9
相关联"abc"
和"Biology"
与Tid=40
"gh"
相关。
如何在不改变数据传输方式的情况下优雅地执行此操作? (它来自使用JSON中的ASP.NET Web服务的数据库)
答案 0 :(得分:0)
你可以使用$ http.get(),它有成功和错误回调函数,它返回一个promise对象。使用此功能,您可以设置一个条件来映射ID并获得所需的结果。
像这样。
var myObject1 = {};
var myArray1 = [];
var myObject2 = {};
var myArray2 = [];
$http.get('json-file')
.success(function(data)) {
myObject1.myArray1 = data;
}
$http.get('json-file')
.success(function(data)) {
myObject2.myArray2 = data;
}
/* inside a loop if required */
if (myObject1.myArray1[index].id == myObject2.myArray2[index].Tid) {
/* perform logic */
}
此代码将出现在服务或控制器中。
Haven没有对它进行测试,因此不确定语法,但承诺对象是可行的方法。
希望这有帮助。
答案 1 :(得分:0)
这将返回一个数组数组。数组中的每个数组都包含两个由id === Tid匹配的对象。据我所知,你想要的是什么。
(注意,我认为你提供了破碎的样本数组,我调整并加扰了数字,这样你就可以看到它更清晰了)。
var arr1 = [ {id: 9, name: 'abc'}, {id: 2, name: 'def'}, {id: 40, name: 'gh'} ];
var arr2 = [ {class: 'physics', Tid: 2}, {class: 'computer science', Tid: 40}, {class: 'Biology', Tid: 9} ];
var arrFinal = arr1.map ( function ( d ) {
var matched = arr2.find ( function ( obj ) {
return obj.Tid === d.id;
} );
return [ d, matched ];
} );
如果你迭代arrFinal,你会看到它包含匹配的对象。