【问题标题】:Javascript: Find out if we have at least two different values in an arrayJavascript:找出数组中是否至少有两个不同的值
【发布时间】:2013-08-13 08:34:32
【问题描述】:

我的目标是找出一个数组中是否至少有两个不同的值。如何使用纯 javascript 找出这一点。到现在为止,我用这个函数,谁告诉我一个数组中是否有重复的值...

function verificar(array)
{

var filtrado_arr = array.sort(); 
var resultados = [];
for (var i = 0; i < array.length - 1; i++) {
     if (filtrado_arr[i + 1] == filtrado_arr[i]) {
         resultados.push(filtrado_arr[i]);
 }
 }
  if (resultados.length > 0)
 {
  alert("Repeated results"+resultados+".Unable to send to graph.");
  return false;
  }
  else
  {
  alert("No repeated measures, we can set graph");
  return true;
  }
 }

当然,这还不够。

【问题讨论】:

  • 如果数组的大小大于1,排序后比较最后一个元素和第一个元素
  • 为什么要麻烦排序,除非它需要用于未显示的东西?只需将数组的第一个元素与其他元素进行比较,直到 (a) 发现差异或 (b) 都已比较且未发现差异。
  • 另外,根据您声明的目标,第二次打印具有误导性。第二次打印听起来像是零重复,而既定目标是至少有两个不是重复的。 A、AM B 达到既定目标,但未达到第二次印刷。 A、B C 符合第二次印刷。

标签: javascript arrays function sorting


【解决方案1】:

您的代码暗示您要检查重复项,而不是验证您是否至少有一对唯一的值,如您的问题中所述。

我只是在答案池中添加另一种方法:使用 Array.some() 检查重复项:

function hasDuplicates(array){
    return array.some( function( elm, idx ){
        return array.lastIndexOf( elm ) > idx;
    });
}
console.log( hasDuplicates([3,4,1,2]) ); // false
console.log( hasDuplicates([3,4,1,3,2]) ); // true

【讨论】:

    【解决方案2】:

    只需对照数组中的所有其他值检查数组“filitrado_arr[0]”的第一个值。如果其中一个值与数组的第一个值匹配,则您知道存在重复值。以下是如何实现该逻辑的示例:

        function verificar(array){ 
        var repeats = false
        for (var i = 1; i < array.length; i++) {
             if (array[0] == array[i]) {
                 repeats = true;
                 return repeats
         }
         }
    }
    

    但是,此答案与原始函数中的警报所暗示的目标相匹配,而不是问题本身的目标。

    【讨论】:

    • 很好的解决方案!非常感谢!
    【解决方案3】:
    function verificar(array) {
    
       for(i=1; i<array.length; i++){
          if(array[0] !== array[i])
             return true;
       }
    
       return false;
    }
    

    【讨论】:

    • 谢谢!这是一个有价值的解决方案。
    【解决方案4】:

    使用排序和额外的数组似乎是执行这个简单任务的一种过于昂贵的方法。以下有什么问题?

    function verificar(arr)
    {
       for (var i=1; i<arr.length; i++) {
          if (arr[i-1] != arr[i])
             return true;
       }
       return false;
    }
    

    【讨论】:

    • 哇!非常感谢 BigBadaboom 它工作正常。我可以给你一些积极的投票或类似的吗?
    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 2023-04-05
    • 2022-01-08
    • 2019-05-28
    • 2017-06-30
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多