分割空字符串应返回空数组。

7
如果我使用
''.split(',')

我收到的是一个空字符串[''],而不是一个空数组[]

如何确保一个空字符串总是返回一个空数组?


2
编写自己的 split 替换并破坏兼容性吗?如果你在非空字符串上使用 ',' 进行分割,就会得到一个包含原始字符串的数组,就像这里一样。 - Dave Newton
6个回答

12

在调用split之前,只需简单地检查字符串是否为假值:

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

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

但是我仍希望 'p,q,r'.split(',').splice() 拆分成一个由3个元素组成的数组。 - mortensen
如果实际上有一个非空字符串,那么会中断;不过,这似乎是一个特殊情况,可以更轻松地通过检查空字符串来处理。 - Dave Newton
这真的没有回答问题。正如@mortensen在评论中问到的那样,'p,q,r'.split(',').splice()将返回一个空数组[] - Vibhu

2

const arr = ''.split(',').filter(Boolean);
console.log('result:', arr)


2

尝试使用这个

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

1
我认为您希望最后的s是一个空数组。 - Dave Newton
1
那么你是怎么有时间回答的呢? - Dave Newton

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


0

-2

split()函数总是将字符串分割成至少一个部分,因此您可以尝试:

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

你也可以编写一个新的分割方法,例如:

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

所以你可以尝试:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接