配列の各項目が互いに同じかどうかをテストする必要があります。たとえば:各項目は同じではないので配列の各項目がjavacriptで同一であるかどうかを確認します
var list = ["l","r","b"]
は、falseとして評価しなければなりません。一方、この:彼らはすべて同じであるため、
var list = ["b", "b", "b"]
はtrueとして評価しなければなりません。これを達成する最も効率的な方法(スピード/リソース)は何でしょうか?
配列の各項目が互いに同じかどうかをテストする必要があります。たとえば:各項目は同じではないので配列の各項目がjavacriptで同一であるかどうかを確認します
var list = ["l","r","b"]
は、falseとして評価しなければなりません。一方、この:彼らはすべて同じであるため、
var list = ["b", "b", "b"]
はtrueとして評価しなければなりません。これを達成する最も効率的な方法(スピード/リソース)は何でしょうか?
function identical(array) {
for(var i = 0; i < array.length - 1; i++) {
if(array[i] !== array[i+1]) {
return false;
}
}
return true;
}
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
は、同様に短絡を行います。
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;
最初に遭遇したときにfalseを返します。 – Jivings
ええ、私は、OPが後で使用するか、関数で返すかどうかはわかりませんでした。 –
私の提案は(Easiest way to find duplicate values in a JavaScript arrayをチェックアウト)重複を削除して、すべてのアイテムが同じであったことを、長さ== 1を意味するであろうことかどうかを確認することです。
ソートアルゴリズムによってはO(n^2)(またはO(n log n))となります。遅すぎる。 – Dogbert
私は実際に2番目の答え(指定すべきである)を提案していました。 –
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;
}
私の最初の答えと同じです:それは配列の最後の要素で失敗します。 – Jivings
私はこの解決策を選んだ、ありがとう。 Pimvdbはarray.everyという非常に洗練されたソリューションを持っていましたが、これは、大規模なドキュメントに(ES5に準拠していないブラウザをサポートするための)大量のコードを追加する必要がありました。 – Nick
あなたのソリューションは私にとって最も理にかなったものでした。しかし、次の配列[1,1,1,1,1,1、 "1"]であなたの解が真を返すので、 "!="を "!=="に変更します。最後の文字は文字列です。 –
@JoffreyBaratheonあなたは正しい、固定、ありがとう! – Dogbert