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

Posted

技术标签:

【中文标题】过滤器数组 - 删除另一个数组中存在的值[重复]【英文标题】:Filter array - remove values that are present in another array [duplicate] 【发布时间】:2018-11-29 14:55:03 【问题描述】:

我有这个数组 $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 不是函数

【问题讨论】:

你应该console.log(v) 来检查你在那里得到了什么 【参考方案1】:

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

你需要

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

【讨论】:

哎呀..我完全忘记了 应始终使用完全限定的 ===,除非您特别打算进行松散匹配(然后记录下来)【参考方案2】:

选择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; )
)

【讨论】:

【参考方案3】:

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

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 中找到该项目的索引,然后将其删除(如果存在)。

【讨论】:

【参考方案4】:

试试这个:

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

【讨论】:

以上是关于过滤器数组 - 删除另一个数组中存在的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我如何将一次出现的所有项目过滤到一个列表中,并将多次出现的所有项目过滤到另一个列表中?

如果数组存在于另一个多维数组中,如何从多维数组中删除该数组? [复制]

找到重复的值并比较另一个键

如何在JavaScript / Jquery中对另一个数组中已经存在的数组元素进行切片[重复]

如何检查另一个数组中不存在数组值

随机化一个整数数组[重复]