2016-04-14 4 views
1

私はarrayウィッヒは私が試したことについては、アレイJavascriptのindexOfメソッド

内のすべてのtest234のインデックスを取得したい複数の同じ値ここで

["test234", "test9495", "test234", "test93992", "test234"] 

が含まれていArray.prototype.indexOf()方法。しかしそれは私に0を返すだけですが、私はそれを返すようにします[0, 2, 4]

どうすればいいですか?

var array = ["test234", "test9495", "test234", "test93992", "test234"]; 
 
document.write(array.indexOf("test234"));

+0

の可能性のある重複した[配列内の要素のすべてのオカレンスのインデックスを見つける方法?](http://stackoverflow.com/questions/20798477/how-to-find-index -of-all-occurrence-of-an-element-in-array) – 4castle

+0

この質問は正確な複製ですが、 'for'ループを使用することがタスクにとって最も効率的な解決策であることを言及しておきます。 – 4castle

答えて

5

ただ、各配列要素をチェックするためにそれのためのループを作ります。

var array = ["test234", "test9495", "test234", "test93992", "test234"]; 
 

 
for (i=0;i<array.length;i++) { 
 
    if (array[i] == "test234") { 
 
    document.write(i + "<br>"); 
 
    } 
 
}

+0

プロトタイプとして作れますか? –

+0

@MrZ 'Arrayに追加することを意味する場合。プロトタイプ 'の場合、答えは「はい」ですが、それは悪い習慣であり、予期しない効果があります。配列を動作させるには '[]'の代わりに 'new Array()'を使って全ての配列を初期化しなければなりません。あなたは、単にユーティリティー機能を作る方が良いです。 – 4castle

+0

あなたは本当にこれを偽の解答にするには '=='の代わりに '==='を使用してください。 [これを参照してください](http://stackoverflow.com/q/359494/5743988) – 4castle

1

あなたはArray#indexOffromIndexを使用することができます。

たfromIndex

で検索を開始するインデックス。インデックスが配列の長さ以上の場合、-1が返されます。つまり、配列は検索されません。指定されたインデックス値が負の数である場合、それは配列の最後からのオフセットとみなされます。注意:指定されたインデックスが負の場合、配列は前から後まで検索されます。計算されたインデックスが0より小さい場合、配列全体が検索されます。デフォルト:0(アレイ全体が検索されます)。

は、bitwise not operatorです。

インデックス0 ... nそうでない場合-1た場合indexOf戻りますので、それはindexOf()での使用に最適です。このような機能はdoesnの

value ~value boolean 
-1 => 0 => false 
0 => -1 => true 
1 => -2 => true 
2 => -3 => true 
and so on 

var array = ["test234", "test9495", "test234", "test93992", "test234"], 
 
    result = [], 
 
    pos = array.indexOf('test234'); 
 

 
while (~pos) { 
 
    result.push(pos); 
 
    pos = array.indexOf('test234', pos + 1); // use old position incremented 
 
} //        ^^^^^^^ 
 

 
document.write('<pre> ' + JSON.stringify(result, 0, 4) + '</pre>');

+0

'〜'は私の脳を傷つける。 – 4castle

+0

@ 4castle、どうぞ編集してください: –

+0

私はそれが何をし、どのように動作するのかを正確に知っています。私はそれが一般的に混乱していると言っているだけです。私は、奇妙な演算子を使用する代わりに、私が意味するものを正確にコーディングする方が好きです。それになると、私たちのコードはほぼ同じです。 – 4castle

0

をそれが組み込まれていますが、それはプレットあなた自身で簡単に作ることができます。ありがたいことに、indexOfは、2番目のパラメータとして開始インデックスを受け入れることもできます。

function indexOfAll(array, searchItem) { 
 
    var i = array.indexOf(searchItem), 
 
     indexes = []; 
 
    while (i !== -1) { 
 
    indexes.push(i); 
 
    i = array.indexOf(searchItem, ++i); 
 
    } 
 
    return indexes; 
 
} 
 

 
var array = ["test234", "test9495", "test234", "test93992", "test234"]; 
 
document.write(JSON.stringify(indexOfAll(array, "test234")));

関連する問題