2016-05-24 60 views
0

我正在使用的文件早在我開始在這裏工作之前就已有53個不同數值的列表。但它也有他們都列爲用逗號分隔這樣的字符串,例如:帶值的字符串vs值數組

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 - 比javascript-native-indexof更快),數據似乎意味着一個數組。 –

+1

可能它是在數組indexOf被支持之前寫入的。但是字符串indexof有缺陷,因爲它有部分匹配。 – epascarello

+3

如果string不包含'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,它只是一個值得搜索的例子。 –