2012-03-10 70 views
7

我需要測試數組中的每個項目是否彼此相同。例如:檢查數組中的每個項目在javascript中是否相同

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

應該評估爲假,因爲每個項目不完全相同。在另一方面這樣的:因爲他們都是相同的

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

應該評估爲真。實現這一目標的最有效(速度/資源)方式是什麼?

回答

9
function identical(array) { 
    for(var i = 0; i < array.length - 1; i++) { 
     if(array[i] !== array[i+1]) { 
      return false; 
     } 
    } 
    return true; 
} 
+1

我選擇了此解決方案,謝謝。 Pimvdb對array.every有一個非常優雅的解決方案,但是這需要爲一個已經很大的文檔添加一大塊代碼(對於非ES5兼容的瀏覽器支持),因爲我只選擇了一個.every實例,所以我選擇了這個。 – Nick 2012-03-10 17:13:04

+0

您的解決方案對我最有意義。但是,我會將「!=」更改爲「!==」,因爲您的解決方案在以下數組中返回true [1,1,1,1,1,1,「1」],其中最後一個字符是字符串。 – 2016-03-21 22:34:52

+0

@JoffreyBaratheon你是對的,修好了,謝謝! – Dogbert 2016-03-22 08:17:05

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

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

    return true; 
} 
+1

將在所述陣列的最後一個元素失敗。 – 2012-03-10 13:52:39

+0

是的,我剛剛注意到了。 – Jivings 2012-03-10 13:53:19

+1

已編輯立即開始工作。 – Jivings 2012-03-10 13:55:13

12

在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確實短路也是如此。

+1

不錯,不知道這是否存在,並開始使用這個我自己。只需添加一個指向array.every文檔的指針https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every – Shane 2012-03-10 14:10:51

+0

謝謝,這是一個非常優雅的解決方案。爲了避免添加array.every代碼來支持舊瀏覽器,我最終選擇了Dogberts解決方案 - 但原則上這樣做可以很好地工作。 – Nick 2012-03-10 17:15:17

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

當你第一次遇到它時就返回false。 – Jivings 2012-03-10 13:54:42

+0

是的,我不確定OP是否希望以後使用它,或者在函數中返回。 – 2012-03-10 13:56:16

0

我的建議是,以消除重複(退房Easiest way to find duplicate values in a JavaScript array),然後檢查是否長度== 1這將意味着所有的項目都是一樣的。

+2

這可能是O(n^2)(或O(n log n),具體取決於排序算法)。太慢了。 – Dogbert 2012-03-10 13:55:34

+0

我實際上是建議第二個答案(應該指定),即刪除重複沒有排序。 – 2012-03-10 15:09:48

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

} 
+1

就像我的第一個答案:它會在數組的最後一個元素失敗。 – Jivings 2012-03-10 13:59:41

相關問題