AngularJS,如何检查数组是否包含重复值?

时间:2016-01-11 18:55:38

标签: arrays angularjs duplicates

如果数组有重复值,如何检查特别是使用AngularJS

如果存在多于1个元素,则返回true。 否则,返回false。

$scope.intArray = [5, 11, 17, 53] // return false because no duplicates exist
$scope.intArray = [5, 11, 17, 5]  // return true because duplicaets exist

4 个答案:

答案 0 :(得分:2)

如果您有ES2015环境(截至撰写本文时:io.js,IE11,Chrome,Firefox,WebKit),那么以下内容将会起作用,并且速度很快(即O(n)):

function hasDuplicates(array) {
  return (new Set(array)).size !== array.length;
}

否则:

function hasDuplicates(array) {
  var valuesSoFar = Object.create(null);
  for (var i = 0; i < array.length; ++i) {
    var value = array[i];
    if (value in valuesSoFar) {
        return true;
    }
    valuesSoFar[value] = true;
  }
  return false;
}

答案 1 :(得分:1)

只需对数组进行排序,然后运行它,看看下一个索引是否与当前索引相同。

$scope.intArray = [5, 11, 17, 5];
checkDupes($scope.intArray);

function checkDupes(array)
{
  array.sort(); // use whatever sort you want
  for (var i = 0; o < array.length -1; i++)
  {
    if (array[i+1] == array[i])
    {
      return true;
    }
  }
  return false;
}

答案 2 :(得分:1)

http://codepen.io/anon/pen/xZrrXG?editors=101

将hasDuplicate创建为范围方法,如果需要,可以在html中轻松使用。

var app = angular.module('myapp', []);

app.controller('mycontroller', ['$scope', function($scope) {
  $scope.intArray = [5, 11, 17, 5];

  $scope.hasDuplicate = function(data) {
    for (var i = 0; i < data.length; i++) {
      for (var x = i + 1; x < data.length; x++) {
        if (data[i] == data[x]) {
          return true;
        }
      }
    }
    return false;
  };
}]);

答案 3 :(得分:1)

您可以使用lodash库,有时可以发现它非常方便。并像在此处提到的那样实现它:https://stackoverflow.com/a/28461122/4059878