AngularJS过滤器基于几乎存在的字符串数组

时间:2015-05-26 11:30:33

标签: javascript arrays angularjs filter

我正在尝试根据字符串数组创建自定义角度过滤器,例如:

$scope.idArray = ['1195986','1195987','1195988']

我要过滤的数据格式为:

    $scope.data = {
    "moduleName": null,
    "contentholder_0": {
        "moduleName": "contentholder",
        "id": "-1",
        "name": "",
        "content": ""
    },
    "webapps_1": {
        "moduleName": "webapps",
        "items": [{
            "itemid": "1195986",
            "name": "abc"
        },{
            "itemid": "1195987",
            "name": "def"
        },{
            "itemid": "1195988",
            "name": "ghi"
        }]
    }
}

我查看了此Stack Question以尝试创建自定义过滤器: Example

以下是答案的JSFiddle

我无法破解它以适应我想要做的事情的数据结构(过滤"项目"如果" itemid"在" idArray&#34)

这是一个JSfiddle尽可能接近我没有崩溃的角度。

如果这是一个非常简单的问题,请原谅我,但我是一个初学者,并尝试了多种方法让这个工作,但天堂已经能够。我不确定实际过滤的位置以及如何将idArray中的字符串与data.webapps_1.items.itemid进行比较

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我相信这就是你要做的事情。这个过滤器现在检查是否有任何项目与ID数组中的任何项目具有相同的ID。

.filter('selectedTags', function () {
return function (items, tags) {
    var filtered = [];
    angular.forEach(items, function (item) {
        angular.forEach(tags, function (tag) {
            if (item.itemid == tag) {
                filtered.push(item);
            }
        });
    });
    return filtered;
};
})

请参阅此Fiddle

答案 1 :(得分:0)

我不确定这是否对您有所帮助,但我喜欢使用underscore.js来操纵我的JS对象/数组,并且有一个功能就是这样:

_.pluck(data.webapps_1.items, 'itemid');

基于documentation

  

啃削

     

_。pluck(list,propertyName)   可能是map最常见的用例的便捷版本:提取属性值列表。

var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
_.pluck(stooges, 'name');
=> ["moe", "larry", "curly"]

根据我对您的问题的理解,这将从idArray

生成data

然后您可以创建一个调用此代码的自定义过滤器:)