2016-09-28 50 views
2

如果我使用斯普利特空字符串應該返回空數組

''.split(',') 

我得到[''],而不是一個空數組[]

如何確保空字符串總是返回空數組?

+2

自己寫的'split'更換和破壞兼容性?如果你在''上分割一個非空字符串,'你會得到一個包含原始字符串的數組,就像這裏一樣。 –

回答

5

您可以使用splice()

''.split(',').splice() 
//[] 

這個例子適用於您的問題:

function returnArr(str){ 
    return !str ? [] : str.split(',') 
} 

returnArr('1,2,3') 
// ['1','2','3'] 
returnArr('') 
//[] 
+0

但是我仍然想要'p,q,r'.split(',')。splice()'將其拆分爲3個元素的數組 – mortensen

+0

但是如果實際上有非空字符串,會中斷;這看起來像是一個特殊情況,只需檢查一個空字符串就可以輕鬆處理。 –

+0

@mortensen我編輯了我的答案。 –

0

與此

r=s?s.split(','):[]; 
+1

我想你會希望最後的's'是一個空陣列。 –

+0

我沒有時間閱讀這個問題。 – user2314737

+0

那你是如何有時間回答的? –

0

分(試行)總是試圖分裂成碎片,所以你可以嘗試:

l=''; 
list=(l=='')?[]:l.split(','); 

總是適用於

l='p,q,r'; 
list=(l=='')?[]:l.split(','); 

你也可以編寫一個新的分割方法:

String.prototype.split2 = function (ch) { 
    return (this=='')?[]:this.split(ch) 
} 

所以土特產品可以嘗試:

''.split2(',');   //result: [] 
'p,q,r'.split2(','); //result: ['p','q','r'] 
0

我想這應該這樣做;

console.log(''.split(',').reduce((p,c) => c ? p.concat(c) : p ,[])); 
 
console.log("test1,test2,".split(',').reduce((p,c) => c ? p.concat(c) : p ,[]));