2016-05-24 15 views
0

私がここで作業を始めるずっと前に作られたファイルは、53の異なる数値のリストを持っています。しかし、それはそれらすべて、たとえばなどのコンマで区切った文字列として表示されています:値を持つ文字列と値の配列

var numbers = "1,2,3,4,5,...,48,49,50"; 

後のスクリプトで、それが使用中で渡された変数が存在するかどうかを確認し、存在するとき:

は、
if(numbers.indexOf(String(x),0) < 0) {/*do stuff*/} else {/*do other stuff*/} 

これはうまくいくものの、なぜこのようなやり方が選択されたのか不思議ではありません。それは、それが現在設定されている方法でそれをやっているという点でパフォーマンスの点でより最適でしょうか?

+2

なぜ?あなたの前の男はそれが良い考えだと思ったから。頻繁な検索をしている場合、配列に変換する必要があります( 'indexOf'はかなり遅いので)(http://stackoverflow.com/questions/6682951/why-is-looping-through-an-array-so -mak-faster-than-javascripts-native-indexof)、データは配列を暗示しているようです。 –

+1

おそらく配列indexOfがサポートされる前に書かれています。しかし、文字列indexofは部分的にマッチしているので脆弱です。 – epascarello

+3

文字列に '4'が含まれておらず、' 14'が含まれている場合、 '4'のインデックスをチェックすると' 14'に '4'のインデックスが返されます。配列の場合は '-1'を返します。 –

答えて

0

オブジェクトをコンマで区切って、値を含む文字列の内容にすばやくアクセスするための提案。

var numbers = "1,2,3,4,5,6,48,49,50", 
 
    object = Object.create(null), // create empty object without any properties/prototypes 
 
    x = 48; 
 

 
numbers.split(',').forEach(function (a, i) { 
 
    object[a] = i; // position of item 
 
}); 
 

 
// usage 
 
if (x in object) { 
 
    /*do stuff*/ 
 
    alert('pos: ' + object[x]); 
 
} else { 
 
    /*do other stuff*/ 
 
}

+0

'x = 48;'の行は何ですか? – Redu

+0

@Reduは、検索する値の単なる例です。 –

関連する問題