意外导致功能分离唯一和非唯一项目

时间:2015-11-15 12:59:03

标签: javascript arrays function for-loop

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数组中。非常感谢任何帮助,谢谢。

1 个答案:

答案 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]);
    }

  }
}