2012-03-10 6 views
7

配列の各項目が互いに同じかどうかをテストする必要があります。たとえば:各項目は同じではないので配列の各項目がjavacriptで同一であるかどうかを確認します

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

は、falseとして評価しなければなりません。一方、この:彼らはすべて同じであるため、

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

はtrueとして評価しなければなりません。これを達成する最も効率的な方法(スピード/リソース)は何でしょうか?

答えて

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に準拠していないブラウザをサポートするための)大量のコードを追加する必要がありました。 – Nick

+0

あなたのソリューションは私にとって最も理にかなったものでした。しかし、次の配列[1,1,1,1,1,1、 "1"]であなたの解が真を返すので、 "!="を "!=="に変更します。最後の文字は文字列です。 –

+0

@JoffreyBaratheonあなたは正しい、固定、ありがとう! – Dogbert

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

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

    return true; 
} 
+1

それは、配列の最後の要素で失敗します。 –

+0

ええ、私はちょうどそれに気づいた。 – Jivings

+1

編集しました。 – Jivings

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/ja/JavaScript/Reference/Global_Objects/Array/every – Shane

+0

ありがとう、それは非常に洗練されたソリューションです。古いブラウザをサポートするためにarray.everyコードを追加することを避けるために、私はDogbertsのソリューションに行きましたが、原理的にうまくいきました。 – Nick

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

+0

ええ、私は、OPが後で使用するか、関数で返すかどうかはわかりませんでした。 –

0

私の提案は(Easiest way to find duplicate values in a JavaScript arrayをチェックアウト)重複を削除して、すべてのアイテムが同じであったことを、長さ== 1を意味するであろうことかどうかを確認することです。

+2

ソートアルゴリズムによってはO(n^2)(またはO(n log n))となります。遅すぎる。 – Dogbert

+0

私は実際に2番目の答え(指定すべきである)を提案していました。 –

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

関連する問題