如何检查数组是否只包含一个不同的元素?

时间:2017-04-12 12:44:09

标签: javascript

如何检查我的数组是否只包含一个不同的元素? `

var arr = [1, 1, 1];
var arr2 = [1, 2, 3];
checkIfThereIsOnlyOneElement(arr); //should return true
checkIfThereIsOnlyOneElement(arr2) //should return false;`

8 个答案:

答案 0 :(得分:2)

使用Set对象:

var arr = [1, 1, 1],
    arr2 = [1, 2, 3],
    checkForOne = function(arr){
        return (new Set(arr)).size === 1;
    }
    
console.log(checkForOne(arr));
console.log(checkForOne(arr2));

答案 1 :(得分:2)

你可以这样实现:

var arr = [1, 1, 1];
var arr2 = [1, 2, 3];

console.log(checkIfThereIsOnlyOneElement(arr));
console.log(checkIfThereIsOnlyOneElement(arr2));

function checkIfThereIsOnlyOneElement(arr) {
    arr.sort();
    return arr[0] == arr[arr.length -1]
}

答案 2 :(得分:0)

尝试这个简单的实现

function checkIfThereIsOnlyOneElement(arr)
{
  var map = {};//create a map
  for( var counter = 0; counter < arr.length; counter++)
  {
    map[ arr[ counter ] ] = true;
    if ( Object.keys ( map ).length > 1 ) //check if this map has only one key
    {
      return false;
    }
  }
  return true;
}

答案 3 :(得分:0)

只需检查所有元素是否包含相同的值,一种方法是使用“lodash”模块的“uniq”功能:

checkIfThereIsOnlyOneElement(arr){
     return _.uniq(arr).length == 1; 
}

答案 4 :(得分:0)

您可以检查数组中的唯一值。基于这个术语,我们可以实现您的功能:

&#13;
&#13;
done.fail()
&#13;
&#13;
&#13;

jsfiddle

答案 5 :(得分:0)

这个功能有很多非常简单的实现。让我给你两个,一个是功能性单行,另一个是迭代(可能表现更好)的片段。

顺便说一下,你的命名很糟糕,应该叫它:isArrayOfTheSameElements

  // Iterative:
  function isArrayOfTheSameElements(arr){
    var firstElement = arr[0];
    for(var i=1; i < arr.length; i++){
      if (arr[i]!==firstElement) {
        return false;
      }
    }
    return true;
  }

  // Functional:
  function isArrayOfTheSameElements(arr){
    return Object.keys(arr.reduce(function(current, next){
      return current[next] = next && current;
    }, {})).length <= 1;
  }

答案 6 :(得分:0)

您可以使用Array#every并仅检查agsindt firsr元素。

function checkDistinct(array) {
    return array.every(function (a, _, aa) { return a === aa[0]; });
}

var arr = [1, 1, 1],
    arr2 = [1, 2, 3];

console.log(checkDistinct(arr));  // true
console.log(checkDistinct(arr2)); // false

答案 7 :(得分:0)

.every()可以像@Nina Scholz所指出的那样正确地做var all = a => a.length-1 ? a[0] === a[1] && all(a.slice(1)) : true; console.log(all([1,1,1,1])); console.log(all([1,1,1,2]));,但对于各种各样的你也可以这样做;

false

一旦满足{{1}}值,迭代就会有同样的好处。