我需要测试数组中的每个项目是否彼此相同。例如:
var list = ["l","r","b"]
应评估为false,因为每个项目不相同。另一方面,这个:
var list = ["b", "b", "b"]
应该评估为真,因为它们都是相同的。实现这一目标的最有效(速度/资源)方式是什么?
答案 0 :(得分:15)
在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];
});
.every
也会发生短路。
答案 1 :(得分:10)
function identical(array) {
for(var i = 0; i < array.length - 1; i++) {
if(array[i] !== array[i+1]) {
return false;
}
}
return true;
}
答案 2 :(得分:2)
function matchList(list) {
var listItem = list[0];
for (index in list) {
if(list[index] != listItem {
return false;
}
}
return true;
}
答案 3 :(得分:1)
var list = ["b", "b", "b"];
var checkItem = list[0];
var isSame = true;
for (var i = 0; i < list.length; i++) {
if (list[i] != checkItem) {
isSame = false;
break;
}
}
return isSame;
答案 4 :(得分:1)
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- begin snippet: js hide: false console: true babel: false -->
答案 5 :(得分:1)
arr.every(i=>i==arr[0]) //will return true if all items in arr are identical
答案 6 :(得分:0)
我的建议是删除重复项(查看Easiest way to find duplicate values in a JavaScript array),然后检查长度是否= = 1.这意味着所有项目都是相同的。
答案 7 :(得分:0)
function allEqual(list)
{
if(list.length == 0 || list.length == 1)
{
return true;
}
for (index in list) {
if(list[index] != list[index+1] {
return false;
}
}
return true;
}
答案 8 :(得分:0)
你总是可以做一个新的Set,并检查长度。
var set1 = [...new Set(list)].length === 1 ? true: false;
答案 9 :(得分:0)
let arr = ["l","r","b"];
单行答案是:
arr.every((val,ind,arr)=> val === arr [0]);
您可以查看Array.every以获得更多详细信息。
注意:
ES5
开始可用。true
。arr.every(callback[, thisArg])
或array.every(function(currentValue, index, arr), thisValue)