【问题标题】:Create a function to evaluate if all elements in the array are the same创建一个函数来评估数组中的所有元素是否相同
【发布时间】:2019-03-23 15:17:03
【问题描述】:

问题

我正在尝试创建一个评估数组的函数,如果数组中的每个元素都相同,它将返回 true,否则返回 false。我不希望它为每个单独的元素返回 true/false,而只是为整个数组返回。

尝试 1

此方法有效,但它为数组中的每个元素返回 true/false

function isUniform(arr){
    let first = arr[0];
    for (let i = 1; i <arr.length; i++){
        if (arr[0] !== arr[i]){
            console.log(false);
        } else {
            console.log(true);
        }
    }
}

尝试 2

这个方法返回一次true/false,然后在最后再次打印true:

function isUniform(arr){
    let first = arr[0];
    for (let i = 1; i <arr.length; i++){
        if (arr[0] !== arr[i]){
            console.log(false);
        }
    }
    console.log(true);
}

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    如果你想测试数组的每个元素是否都为真,你真的不需要写太多——你可以使用array.every 来比较第一个元素。 every() 很好,因为如果发现错误条件,它会提前返回。

    var arr1 = [1, 1, 1, 1, 1, 1, 1]
    var arr2 = [1, 1, 1, 2, 1, 1, 1]
    
    console.log(arr1.every((n, _, self) => n === self[0]))
    console.log(arr2.every((n, _, self) => n === self[0]))

    这将为空数组返回 true,这可能是也可能不是您想要的。

    【讨论】:

    • 这是最好的答案
    • @KunalMukherjee,这是一种不同的方法,但不是问题的答案。
    • @NinaScholz OP 询问数组中的所有元素是否相同
    • 谢谢!以后我会记住这一点 - 现在我仅限于使用 for 循环或 for each,但我很高兴我学会了这一点。
    • 如果只是检查问题,那么显然是重复问题和关闭请求的问题。
    【解决方案2】:

    使用对象Set的替代方法

    new Set(arr).size === 1 // This means all the elements are equal.
    

    let isUniform = (arr) => new Set(arr).size === 1;
    
    console.log(isUniform([4,4,4,4,4]));
    console.log(isUniform([4,4,4,4,4,5]));

    【讨论】:

      【解决方案3】:

      添加return statementfalse 并结束函数。返回值可以稍后使用。

      function isUniform(arr) {
          let first = arr[0];
          for (let i = 1; i < arr.length; i++) {
              if (arr[0] !== arr[i]) {
                  console.log(false);
                  return false;
              }
          }
          console.log(true);
          return true;
      }
      

      如果使用返回值,你也需要在最后返回true

      【讨论】:

      • 非常感谢。呃,总是像这样愚蠢而简单的事情。
      【解决方案4】:

      尝试Array#every .its 检查所有其他值是否与数组的第一个索引相同

      function isUniform(arr) {
        return arr.every(a=> a === arr[0])
      }
      
      console.log(isUniform([2,2,2,2]));
      console.log(isUniform([4,4,4,4,4,5]));

      【讨论】:

        【解决方案5】:

        问题是一旦找到第一个错误元素就需要停下来:

        function isUniform(arr){
            let first = arr[0]; 
            let uniform = true;
            for (let i = 1; i <arr.length; i++){
                if (arr[0] !== arr[i]){
                    uniform = false; 
                    break;
                }
            } 
            console.log(uniform);
        }
        

        【讨论】:

        • break 不会阻止显示true。它只是退出循环。
        猜你喜欢
        • 2014-01-03
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 2017-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-06
        相关资源
        最近更新 更多