2016-09-28 3 views
2

Если я используюSplit пустая строка должна возвращать пустой массив

''.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

Я думаю, вы хотите, чтобы последний '' 'был пустым массивом. –

+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 ,[]));

Смежные вопросы