2017-04-12 164 views
0

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

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

一個元素意味着..相同的參數? – prasanth

+1

使用'Array.length'? – Saravana

+0

[PHP array:count or sizeof?]可能的重複(http://stackoverflow.com/questions/3974385/php-array-count-or-sizeof) – 2017-04-12 12:46:22

回答

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

+0

非常好。對數組進行排序,然後檢查第一個和最後一個項目是否相同。其他答案使事情變得複雜。 – castis

+0

這個工作完美!謝謝! – stephenpassero

+0

@castis如果數組長度爲一千個元素,該怎麼辦?我只是猜測排序功能將是一個矯枉過正的問題。 'Set'方法似乎更好,imo。 –

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

@Kinduser它正在檢查數組中是否只有一個唯一元素。 – gurvinder372

+0

@Kinduser沒有得到你。 「它正在引爆門。」 – gurvinder372

+0

@Kinduser我知道,我的意思是問 - 我以什麼方式這樣做。 – gurvinder372

1

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

+0

'Array.length'不夠用?有什麼問題使問題複雜化? –

+0

@Kinduser:*如何*'Array.length'就夠了? – David

+0

@Kinduser,這個問題在我看來似乎是「一個獨特的元素」。這就是爲什麼OP要''真''爲'[1,1,1]' – RomanPerekhrest

0

簡單地檢查是否所有元素包含相同的值,一個方法是使用 「lodash」 模塊的 「uniq的」 功能:

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

您可以檢查獨特價值在陣列中。在此基礎上來看,我們可以實現你的函數:

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

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

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值相同的利益。

相關問題