2013-02-25 17 views
0

我有一個JavaScript函數:強大的字符串分割

function doSomething(arg) { 
    var array = arg.split(','); 
    // etc... 
} 

arg使用jQuery的.data('myId')功能填充。

通常,myId包含逗號分隔的整數列表,代碼很好。然而,如果僅myId包含單個整數,代碼失敗,錯誤

對象不支持屬性或方法「分裂」

是否有創建陣列的緊湊,穩健的方法而不包括if語句來處理一個整數或空字符串的邊界條件?

回答

1

你有兩個無關的問題。

第一個用於空字符串的情況:Split將返回一個空字符串的單元素數組。只需檢查並補償。

var array; 
if (arg == "") array = []; 

如果有一個整數,我相信你不會從.data()得到一個字符串,但實際的整數;所以先將其轉換成字符串:

else array = String(arg).split(','); 

或者,你可能只是避免了jQuery的魔術,並直接訪問屬性 - 所有data()屬性只是data-前綴屬性。

2

attr將返回一個字符串,而data將嘗試解析該值並返回具有「正確」類型的對象。

foo.attr('data-myId'); //pass this instead 

雖然沒有if,但您無法避開識別空字符串。您可能需要檢查它,或者使用單個空字符串元素的數組。

1

.data將嘗試根據其內容猜測值的類型,因此它成爲一個數字。你可以使用.attr,如果它作爲屬性可用,它總是返回一個字符串。或者,投到一個字符串:

('' + arg).split(',') 
//or 
String(arg).split(',') 

我實際上不確定是否是首選的。

另請注意,''.split(',')返回['']或具有空字符串元素的數組。您可以通過.filter(function (elem) { return elem !== ''; })

解決此問題另一種可能的替代方法是在元素本身上使用dataset