Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularJs从数组中排除已选择的项_Javascript_Arrays_Angularjs_Angularjs Filter - Fatal编程技术网

Javascript angularJs从数组中排除已选择的项

Javascript angularJs从数组中排除已选择的项,javascript,arrays,angularjs,angularjs-filter,Javascript,Arrays,Angularjs,Angularjs Filter,我在$scope.currentSChannels.scgsLink中有一个对象数组。这个对象数组有如下内容 $scope.currentSChannels.scgsLink=[{channelId:1,sCgsLinkId:1,groupNo:1,percentage:50,expireHrs:4},{channelId:1,sCgsLinkId:2,groupNo:2,percentage:50,expireHrs:1}] 我还有下面的选择列表 模板变得有点棘手。假设selectedLin

我在$scope.currentSChannels.scgsLink中有一个对象数组。这个对象数组有如下内容

$scope.currentSChannels.scgsLink=[{channelId:1,sCgsLinkId:1,groupNo:1,percentage:50,expireHrs:4},{channelId:1,sCgsLinkId:2,groupNo:2,percentage:50,expireHrs:1}]

我还有下面的选择列表


模板变得有点棘手。假设
selectedLink
是指向所选
groupNo

ng-options="t.value as t.text for t in metaData.spGroups | filter: {value: '!' + currentSChannels.scgsLink[selectedLink].groupNo}"
请参见:第二个选择包含与第一个选择相同的集合,排除了已选择的集合

编辑:上述解决方案用于根据一个值排除元素。为了根据一组值排除元素,自定义过滤器最适合:

过滤器

app.filter('channelFilter', function () {
    return function (metadata, exclusions) {
        var filterFunction = function (metadata) {
            // return the metadata object if exclusions array does NOT contain his groupNo
            return !exclusions.some(function (exclusion) {  
                return exclusion.groupNo === metadata.value;
            });
        };

        return metadatas.filter(filterFunction);
    };
});
用法

模板

ng-options="t.value as t.text for t in metaData.spGroups | channelFilter: currentSChannels.scgsLink"


也就是说,通过
groupNo
对所选链接进行分组将更有效,以避免在数组中进行搜索,并在控制器中进行筛选

我想让它更通用一点,所以我做了以下工作

app.filter('excludeFrom',函数(){
返回函数(inputArray、excludeArray、excludeColumnName、inputColumnName){
如果(inputColumnName==未定义)
inputColumnName='值';
var filterFunction=函数(输入项){
return!excludeArray.some(函数(excludeItem){
返回excludeItem[excludeColumnName]==inputItem[inputColumnName];
});
};
返回inputArray.filter(filterFunction);
};

});示例中的selectedLink是什么?我希望在要排除所有已选定组的筛选器中实现“不在筛选器中”。如我在示例中所示,我已经分配了两个组。我希望只允许选择不在该复杂属性中的组(该属性是一个对象数组,如我所示)。“我需要根据数组和该数组中的特定列进行筛选”。根据这句话,我认为你只需要过滤一项。如果您需要针对
scgsLink
的所有元素进行过滤,我会定义一个自定义过滤器……这也是我的想法,但我并不清楚博客文章中的示例。它似乎只适用于一个项目。你能帮我写这个自定义过滤器吗?我会在其中传递一个数组和数组中的一个特定列来进行处理。顺便说一句,您的项目中有没有像lodash或下划线这样的js库?我已经搜索了解决方案,我们没有使用下划线.js,尽管我看到很少有评论说代码是从中借用的。我们已经用过了
ng-options="t.value as t.text for t in metaData.spGroups | channelFilter: currentSChannels.scgsLink"