【问题标题】: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) 来检查你在那里得到了什么

标签: javascript


【解决方案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))
          }
      

      【讨论】:

        猜你喜欢
        • 2022-10-18
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 2018-09-15
        相关资源
        最近更新 更多