【问题标题】:unexpected result in function separating unique and non unique items功能分离唯一和非唯一项目的意外结果
【发布时间】:2015-11-15 12:59:03
【问题描述】:

波纹管函数的目的是仅输出作为参数传递的数组中的非唯一项:

"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 数组中。任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: javascript arrays function for-loop


    【解决方案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]);
        }
    
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2011-05-13
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多