Ответ 1
function identical(array) {
for(var i = 0; i < array.length - 1; i++) {
if(array[i] !== array[i+1]) {
return false;
}
}
return true;
}
Мне нужно проверить, идентичен ли каждый элемент в массиве. Например:
var list = ["l","r","b"]
Должен оцениваться как false, потому что каждый элемент не идентичен. С другой стороны, это:
var list = ["b", "b", "b"]
Должен оцениваться как истинный, потому что все они идентичны. Каким будет наиболее эффективный (по скорости/ресурсам) способ достижения этого?
function identical(array) {
for(var i = 0; i < array.length - 1; i++) {
if(array[i] !== array[i+1]) {
return false;
}
}
return true;
}
В 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
также делает короткое замыкание.
function matchList(list) {
var listItem = list[0];
for (index in list) {
if(list[index] != listItem {
return false;
}
}
return true;
}
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;
<!-- begin snippet: js hide: false console: true babel: false -->
Мое предложение было бы удалить дубликаты (проверьте Самый простой способ найти повторяющиеся значения в массиве JavaScript), а затем проверить, будет ли длина == 1 Это будет означать, что все предметы были одинаковыми.
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;
}
Вы всегда можете сделать новый сет и проверить длину.
var set1 = [...new Set(list)].length === 1 ? true: false;