我想编写一个javascript函数来检查数组是否包含重复值.
我写了下面的代码,但总是给出答案"真实".
有谁能告诉我我错过了什么.
function checkIfArrayIsUnique(myArray)
{
for (var i = 0; i < myArray.length; i++)
{
for (var j = 0; j < myArray.length; j++)
{
if (i != j)
{
if (myArray[i] == myArray[j])
{
return true; // means there are duplicate values
}
}
}
}
return false; // means there are no duplicate values.
}
Run Code Online (Sandbox Code Playgroud)
nat*_*ton 69
一个简单的解决方案,如果你有ES6,使用Set:
function checkIfArrayIsUnique(myArray) {
return myArray.length === new Set(myArray).size;
}Run Code Online (Sandbox Code Playgroud)
ofi*_*hai 20
let arr = [11,22,11,22];
let hasDuplicate = arr.some((val, i) => arr.indexOf(val) !== i);
// hasDuplicate = true
Run Code Online (Sandbox Code Playgroud)
True -> 数组有重复项
错误 -> 唯一数组
CD.*_*D.. 18
这应该只适用于一个循环:
function checkIfArrayIsUnique(arr) {
var map = {}, i, size;
for (i = 0, size = arr.length; i < size; i++){
if (map[arr[i]]){
return false;
}
map[arr[i]] = true;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 16
你得到的返回值是错误的:
一旦找到两个相等的值,就可以得出结论,该数组不是唯一的并返回false.
最后,在您检查完所有对之后,您可以返回true.
如果你这么做,并且数组很大,你可能想要研究对数组进行排序然后只比较相邻元素的可能性.这将比您当前的方法具有更好的渐近复杂度.
假设您的目标浏览器不是 IE8,
这也可以:
function checkIfArrayIsUnique(myArray)
{
for (var i = 0; i < myArray.length; i++)
{
if (myArray.indexOf(myArray[i]) !== myArray.lastIndexOf(myArray[i])) {
return false;
}
}
return true; // this means not unique
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74472 次 |
| 最近记录: |