簡體   English   中英

如何檢查數組是否僅包含一個不同的元素?

[英]How do I check if an array contains only one distinct element?

如何檢查我的數組是否僅包含一個不同的元素? `

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

使用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)); 

您可以這樣實現:

 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] } 

試試這個簡單的實現

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;
}

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

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

您可以檢查數組中的唯一值。 基於此術語,我們可以實現您的功能:

 var arr = [1, 1, 1]; var arr2 = [1, 2, 3]; function checkIfThereIsOnlyOneElement(arr) { return arr.filter(function (item, i, ar) { return ar.indexOf(item) === i; }).length === 1; } console.log(checkIfThereIsOnlyOneElement(arr)); console.log(checkIfThereIsOnlyOneElement(arr2)); 

的jsfiddle

此功能有很多非常簡單的實現。 讓我給您兩個,一個是實用的單行代碼,另一個是迭代的(性能可能更好)的代碼段。

順便說一句,您的命名很糟糕,應該稱為: 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;
  }

您可以使用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 

正如@Nina Scholz所指出的那樣,您總是可以正確地喜歡.every() ,但是對於各種情況,您也可以喜歡。

 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值,就可以減少迭代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM