创建一个函数来评估数组中的所有元素是否相同

时间:2019-03-23 15:17:04

标签: javascript arrays

问题

我正在尝试创建一个计算数组的函数,如果数组中的每个元素都相同,它将返回 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);
}

5 个答案:

答案 0 :(得分:3)

如果您要测试数组的每个元素是否都为真,则不需要编写太多内容,您可以使用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,这可能是您想要的,也可能不是您想要的。

答案 1 :(得分:2)

false添加一个return statement并结束该函数。返回值可以稍后使用。

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

答案 2 :(得分: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 :(得分:1)

尝试使用Array#every。其检查所有其他值与数组的第一个索引相同

$.ajax({
      url: 'http://boschonurlu.herokuapp.com/getStocks',
      type: 'get',
      data: jQuery.param({id: search}),
      dataType: 'json',
      contentType:"application/json; charset=utf-8",
      headers: {
       "cache-control" : "no-cache",
       //also this(below) didn't work
       "Access-Control-Allow-Origin" : "*"
      }                                                                 
    })

答案 4 :(得分:0)

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

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);
}