如果数组有重复值,如何检查特别是使用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
答案 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