检查数组中的每个项目在javascript中是否相同

Nic*_*ick 14 javascript arrays

我需要测试数组中的每个项是否彼此相同.例如:

var list = ["l","r","b"]

应评估为false,因为每个项目不相同.另一方面这个:

var list = ["b", "b", "b"]

应该评估为真,因为它们都是相同的.实现这一目标的最有效(速度/资源)方式是什么?

pim*_*vdb 16

在ES5中,您可以:

arr.every(function(v, i, a) {
   // first item: nothing to compare with (and, single element arrays should return true)
   // otherwise:  compare current value to previous value
   return i === 0 || v === a[i - 1];
});
Run Code Online (Sandbox Code Playgroud)

.every 也会发生短路.

  • 很好,不知道这已存在并将开始自己使用它.只需添加一个指向array.every的文档的指针https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every (2认同)

Dog*_*ert 14

function identical(array) {
    for(var i = 0; i < array.length - 1; i++) {
        if(array[i] !== array[i+1]) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Cha*_*ang 9

一行答案是:

arr.every((val, ind, arr) => val === arr[0]);
Run Code Online (Sandbox Code Playgroud)

您可以查看Array.every了解更多详细信息。

笔记:

  1. Array.every可用ES5
  2. 该方法返回true对于放置在空数组上的任何条件,
  3. 语法:arr.every(callback[, thisArg])array.every(function(currentValue, index, arr), thisValue)
  4. 它不会改变原始数组
  5. every() 的执行是短路的。一旦every()找到与谓词不匹配的数组元素,它立即返回 false 并且不会迭代其余元素


Jen*_*Jen 5

你总是可以做一个新的 Set,然后检查长度。

var set1 = [...new Set(list)].length === 1;
Run Code Online (Sandbox Code Playgroud)