加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – $.grep在匹配后返回属性

发布时间:2020-12-17 06:51:10 所属栏目:安全 来源:网络整理
导读:我找不到任何这样做的例子,所以我问你那些聪明的人,如果有一个很好的方法去做我想要的. 试图将两个数组映射到一起.一个数组具有ID列表(Foos),另一个数组具有这些ID的所有属性(条形).想要保留我的角度控制器中的所有内容. 这是一个片段.我正在尝试匹配ID并映
我找不到任何这样做的例子,所以我问你那些聪明的人,如果有一个很好的方法去做我想要的.

试图将两个数组映射到一起.一个数组具有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
                                };
                            });

我的理解是$.grep将根据条件返回对象,然后我可以调用返回对象的属性吗?

更新:

Foos是ID(guid)
酒吧是ID(guid),名称&属性

解决方法

$.grep返回一个数组,而不是一个对象,所以要做你想做的事情,你需要做一些像:

Name: $.grep($scope.bars,function(b){
            return b.ID === foo.ID;
      })[0].Name

这里的问题是,如果没有匹配,$.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,......
    };
});

这也可以修改为具有一些实用功能,如getNameFromBars(),并将$.grep放在那里并返回找到的值或默认值.

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

也可以使用$filter.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读