'Check if each item in an array is identical in JavaScript

I need to test whether each item in an array is identical to each other. For example:

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

Should evaluate as false, because each item is not identical. On the other hand this:

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

Should evaluate as true because they are all identical. What would be the most efficient (in speed/resources) way of achieving this?



Solution 1:[1]

In ES5, you could do:

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 does short-circuit as well.

Solution 2:[2]

You could always do a new Set, and check the length.

var set1 = [...new Set(list)].length === 1;

Solution 3:[3]

The one line answer is:

arr.every((val, ind, arr) => val === arr[0]);

You can look into Array.every for more details.

Note:

  1. Array.every is available ES5 onwards.
  2. This method returns true for any condition put on an empty array.
  3. Syntax: arr.every(callback[, thisArg]) or array.every(function(currentValue, index, arr), thisValue)
  4. It does not change the original array
  5. The execution of every() is short-circuited. As soon as every() finds an array element that doesn't match the predicate, it immediately returns false and doesn't iterate over the remaining elements

Solution 4:[4]

function matchList(list) {
  var listItem = list[0];

  for (index in list) {
    if(list[index] != listItem {
       return false;
    }
  }

  return true;
}

Solution 5:[5]

arr.every(i=>i==arr[0]) //will return true if all items in arr are identical

Solution 6:[6]

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;

Solution 7:[7]

function identical(array) {
  // a variable holding standard value
  //against this standard value we are examining the array
  var standard = array[1];
  for (var i = 0; i < array.length; i++) {
    if (array[i] !== standard) {
      return false;
    }
  }
  return true;
}

identical([1, 1, 1, 1, 1]); //return true
identical(['a', 'a', 'a']); //return true
identical(['a', 'a', 'b'])

function identical(array) {
  // a variable holding standard value
  //against this standard value we are examining the array
  var standard = array[1];
  for (var i = 0; i < array.length; i++) {
    if (array[i] !== standard) {
      return false;
    }
  }
  return true;
}

identical([1, 1, 1, 1, 1]); //return true
identical(['a', 'a', 'a']); //return true
identical(['a', 'a', 'b'])

Solution 8:[8]

My suggestion would be to remove duplicates (check out Easiest way to find duplicate values in a JavaScript array), and then check to see if the length == 1. That would mean that all items were the same.

Solution 9:[9]

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;

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 Penny Liu
Solution 4 Jivings
Solution 5 Muhammad Raheel
Solution 6 Waynn Lue
Solution 7 Heretic Monkey
Solution 8 Community
Solution 9 Erix