过滤器数组 - 删除另一个数组中存在的值[重复]
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】:
选择some
或indexOf
。例如
$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))
【讨论】:
以上是关于过滤器数组 - 删除另一个数组中存在的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
我如何将一次出现的所有项目过滤到一个列表中,并将多次出现的所有项目过滤到另一个列表中?
如果数组存在于另一个多维数组中,如何从多维数组中删除该数组? [复制]