过滤器数组-删除另一个数组中存在的值

时间:2018-06-20 12:56:17

标签: javascript

我有这个数组 $scope.userEventData.selectedFlats和另一个数组$scope.flatsArray

我想从$scope.userEventData.selectedFlats中删除$scope.flatsArray中存在的值。

我已经做到了:

$scope.userEventData.selectedFlats = $scope.userEventData.selectedFlats.filter(function(f){
    return !$scope.someObj.flatsArray.some(function(v){
                return v.indexOf(f) >= 0;
    })
})

但是我收到一条错误消息,说v.indexOf不是函数

4 个答案:

答案 0 :(得分:1)

v回调函数中的flatsArray.some返回单个项目,而不是项目数组。因此,您不必检查索引,而可以直接比较这些值。

您需要

$scope.userEventData.selectedFlats = $scope.userEventData.selectedFlats.filter(function(f){
    return !$scope.someObj.flatsArray.some(function(v){
                return v == f;
    })
})

答案 1 :(得分:0)

选择someindexOf。例如

$scope.userEventData.selectedFlats = $scope.userEventData.selectedFlats.filter(function(f){
    return $scope.someObj.flatsArray.indexOf(f) === -1
})

$scope.userEventData.selectedFlats = $scope.userEventData.selectedFlats.filter(function(f){
    return !$scope.someObj.flatsArray.some(function(item) { return item === f; })
})

答案 2 :(得分:0)

发布数组可能会有所帮助,以便可以在答案中使用它们,但是,您可以这样做。

for (var i = 0; i < $scope.userEventData.selectedFlats; i++) {
    var index = $scope.flatsArray.indexOf($scope.userEventData.selectedFlats[i]);
    if ( index > -1 ) {
        $scope.userEventData.selectedFlats.splice(index, 1);
    } 
}

这将循环遍历 selectFlats 数组中的每个项目,并在 flatsArray 中找到该项目的索引,然后从该项目中删除该项目。

答案 3 :(得分:0)

尝试一下:

$scope.userEventData.selectedFlats = $scope.userEventData.selectedFlats.filter(
    function(item) {
        return !($scope.someObj.flatsArray.contains(item))
    }