mar*_*ate 5 multidimensional-array angularjs
我找不到任何这样做的例子,所以我问你那些聪明的人,如果有一个很好的方法去做我想要的.
试图将两个数组映射到一起.一个数组具有ID列表(Foos),另一个数组具有这些ID的所有属性(条形).想要保留我的角度控制器中的所有内容.
这是一个片段.我正在尝试匹配ID并映射到Name属性.
$scope.Foos = $.map($scope.Foos, function (foo) {
return {
ID: foo.ID,
Name: $.grep($scope.bars, function(b){
return b.ID === foo.ID;
}).Name,
Property: $.grep($scope.bars, function(b){
return b.ID === foo.ID;
}).Property
};
});
Run Code Online (Sandbox Code Playgroud)
我的理解是$ .grep将根据条件返回对象,然后我可以调用返回对象的属性吗?
更新:
Foos是ID(guid)酒吧是ID(guid),名称和财产
cha*_*tfl 10
$.grep 返回一个数组,而不是一个对象,所以要做你想做的事,你需要做一些像:
Name: $.grep($scope.bars, function(b){
return b.ID === foo.ID;
})[0].Name
Run Code Online (Sandbox Code Playgroud)
这里的问题是,如果没有匹配,$.grep将返回一个空数组,你将最终抛出一个错误,试图从该空数组中获取第一个元素.
你应该首先查看属性,而不是在尝试构建更复杂的对象时
就像是:
$scope.Foos = $.map($scope.Foos, function (foo) {
// first filter the array
var bars = $.grep($scope.bars, function (b) {
return b.ID === foo.ID;
});
// now test we have result, if not make it ... empty string???
var name = bars.length ? bars[0].Name : '';
// do similar for `Property`
return {
ID: foo.ID,
Name: name,
......
};
});
Run Code Online (Sandbox Code Playgroud)
这也可以修改为具有一些实用功能,例如getNameFromBars()并放入$.grep其中并返回找到的值或默认值.
如果你想摆脱jQuery,你可以使用Array.prototype.map()和Array.prototype.filter()替换$.map和$.grep.
也$filter可以使用.