以角度动态过滤嵌套对象?

时间:2014-08-30 03:25:00

标签: javascript json angularjs

我有一个数据集,我已从服务中检索并使用ng-repeat进行显示。我需要根据使用ng-model=<a_name>设置的一些选择元素来过滤此数据。

这是重复的元素:

 <li ng-repeat="item in dota_have_items | orderItemsBy:'pos':false | filter:search | itemFilter:rarity:'rarityProperName'">

在上文中,搜索稀有就是ng-models

以下是json数据的示例:

[
    {
        "user": "u2122", 
        "item": {
            "defindex": 15059, 
            "name": "Bloodstone of the Precursor", 
            "itemClass": "Socket Gem", 
            "imageUrl": "http://cdn.dota2.com/apps/570/icons/econ/tools/bloodstone2.f4936e5a87dc66b47dbe653101cfc17de34176e6.png", 
            "itemHero": null, 
            "itemRarity": {
                "rarityProperName": "Mythical", 
                "rarityColor": "#8847ff"
            }
        }, 
        "item_classid": "170676805", 
        "untradable": true, 
        "item_quality": {
            "dotaName": "Standard", 
            "qualityColor": "#D2D2D2"
        }, 
        "custom_name": null, 
        "custom_desc": null, 
        "uses": 1, 
        "in_trade": false, 
        "pos": 2
    }
] 

注意:是的,我理解我的命名惯例很糟糕。一旦我开始工作,我就打算解决这个问题。

现在我已经创建了一个自定义过滤器(&#39; itemFilter&#39;):

Search.filter('itemFilter', function(){
    return function(items, model, field) {
        if(angular.isUndefined(model)==true || model==null || model==''){
            return items;
        }
        console.log((model.charAt(0).toUpperCase() + model.slice(1)));
        var filtered = [];
        angular.forEach(items, function(item){
            console.log(item.field);
            if(item[field] == (model.charAt(0).toUpperCase() + model.slice(1)) ){
                filtered.push(item);
            }
        });
        return filtered;
    }
});

这就是问题所在。我想制作这个过滤器,以便传递我希望模型映射到的项目,ng-model和字段。例如,ng-model=rarity我通过了&#39; itemRarity&#39;。现在我想要做的是找到该字段,检查模型值是否相同,如果是,则将其添加到已过滤的数组中。看起来很简单,但我不知道如何遍历嵌套对象来查找字段。

有没有办法直接在json对象中找到一个键?

解决方案:取自其他post

不是我正在寻找的100%,因为我不想指定该物业的整个路径,但它能很好地完成工作。

0 个答案:

没有答案