【问题标题】:Array.find(value) return value 'is not a function'Array.find(value) 返回值'不是函数'
【发布时间】:2016-01-04 23:29:24
【问题描述】:

我正在尝试在 AngularJS 数组上使用 JavaScript 的 find() 函数。这是合法的,对吧……?

这个非常简单的代码给我带来了一些问题。就是说$scope.names.find(name1)的返回值不是函数。

TypeError: Name1 is not a function

if($scope.names.find(name1) !== name1) {
   $scope.names.push(name1);
}

我也试过了……

if($scope.names.find(name1) === undefined) {
   $scope.names.push(name1);
}

if(!$scope.names.find(name1)) {
   $scope.names.push(name1);
}

这个if 处于循环中。如果name 不在数组中,则添加它。如果已经在数组中,则不要添加。

这是循环:

angular.forEach($scope.names1, function (name1) {
    angular.forEach($scope.names2, function (name2) {
        if (name1 === name2) {
            $scope.names.push(name1);
        }
    });
    if ($scope.names.find(name1) === name1) {
        $scope.names.push(name1);
    }
});

我不知道错误到底指的是什么。我一定是误用了find()

【问题讨论】:

  • 如您在文档中看到的find 将回调函数作为参数,使用if (!$scope.names.find(function (name1) { $scope.names.push(name1); }) }
  • 不,这是说name1 不是函数。
  • TypeError: name1 is not a function 因为.find 接受一个回调函数并在数组项上执行它,并返回满足回调函数的项的值。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @DaveNewton 错误是不言自明的,它说传递的参数不是函数,这意味着参数应该是函数
  • @Tushar 这正是我所说的。

标签: javascript arrays angularjs


【解决方案1】:

您需要使用indexOf。你的 sn-p 会是

if($scope.names.indexOf(name1) < 0) { //Value not exists in your array
   $scope.names.push(name1);
}

【讨论】:

  • 索引为零表示该元素位于第零位,因此确实存在于数组中。你可以改为$scope.names.indexOf(name1) === -1
  • $scope.names.includes(name1)
【解决方案2】:

或者,考虑使用underscore.js 有很多有用的函数,包括_.find()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多