bellow函数的目的是仅输出作为参数传递的数组中的非唯一项:
"use strict";
function nonUnique(data){
var tab = [];
for(var d = 0; d < data.length; d++) {
if(typeof(data[d]) == "string"){
tab[d] = data[d].toUpperCase();
}
else{
tab[d] = data[d];
}
}
var count = 0;
var tab_non_unique = [];
var tab_unique = [];
for(var i = 0; i < tab.length; i++){
for(var j = 0; j < tab.length; j++){
if(tab[i] == tab[j]){
count ++;
}
if(count > 1){
tab_non_unique.push(tab[i]);
count = 0;
break;
}
if (count == 1) {
tab_unique.push(tab[i]);
}
}
}
return tab_non_unique;
}
我已经通过在不同的数组上调用它来测试该函数,但不知何故在
上nonUnique([1, 2, 3, 4, 5]);
通过返回失败:
=> [ 2, 4 ]
我不明白我的代码中有什么导致2和4将计数器提高到大于1,因此最终会出现在tab_non_unique数组中。非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
问题是,只有在找到非唯一身份时才会重置count
。但是,当以新号码开始时,它应该始终重置。
所以把count=0
放在循环的顶部。
for (var i = 0; i < tab.length; i++) {
count = 0;
for (var j = 0; j < tab.length; j++) {
if (tab[i] == tab[j]) {
count++;
}
if (count > 1) {
tab_non_unique.push(tab[i]);
break;
}
if (count == 1) {
tab_unique.push(tab[i]);
}
}
}