Angularjs $.grep在匹配后返回属性

Angularjs $.grep在匹配后返回属性,angularjs,multidimensional-array,Angularjs,Multidimensional Array,我找不到任何这样做的例子,所以我问你们这些聪明的人,是否有一个简单的方法来做我想做的事情 正在尝试将两个数组映射到一起。一个数组有一个ID列表(foo),另一个数组有这些ID的所有属性(条)。想把所有东西都放在我的角度控制器里 这里有一个片段。我正在尝试匹配ID并映射到Name属性 $scope.Foos = $.map($scope.Foos, function (foo) { return {

我找不到任何这样做的例子,所以我问你们这些聪明的人,是否有一个简单的方法来做我想做的事情

正在尝试将两个数组映射到一起。一个数组有一个ID列表(foo),另一个数组有这些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
                                };
                            });
据我所知,$.grep将根据条件返回该对象,然后我可以调用该返回对象的属性吗

更新:

Foos是ID(guid)
条形图是ID(guid)、名称和属性。

$。grep
返回一个数组,而不是一个对象,因此要执行所需操作,您需要执行以下操作:

Name: $.grep($scope.bars, function(b){
            return b.ID === foo.ID;
      })[0].Name
$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,
        ......
    };
});
但是,这里的问题是,如果没有匹配,
$.grep
将返回一个空数组,您将在尝试从该空数组获取第一个元素时抛出错误

您确实应该首先查找属性,而不是在尝试构建更复杂的对象时

比如:

Name: $.grep($scope.bars, function(b){
            return b.ID === foo.ID;
      })[0].Name
$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,
        ......
    };
});
还可以修改它,使其具有一些实用功能,如
getnamefrombar()
,并将
$.grep
放在其中,然后返回找到的值或默认值

如果您想摆脱jQuery,可以使用
Array.prototype.map()
Array.prototype.filter()
替换
$.map
$.grep


也可以使用
$filter

请给出两个数组值的示例。谢谢,这正是我需要的。我不知道这是一个数组!另外,你用空的选项为我省去了一些麻烦。啊…如果它丢失了,你不确定你想要什么…无法返回对象或做任何最适合你的应用程序的事情