【问题标题】:Split empty string should return empty array拆分空字符串应返回空数组
【发布时间】:2021-07-21 00:27:06
【问题描述】:

如果我使用

''.split(',')

我得到 [''] 而不是空数组 []

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

【问题讨论】:

  • 写你自己的split替换并破坏兼容性?如果你在',' 上拆分一个非空字符串,你会得到一个包含原始字符串的数组,就像这里一样。

标签: javascript arrays


【解决方案1】:

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

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

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

【讨论】:

  • 但我仍然希望'p,q,r'.split(',').splice() 拆分为一个包含 3 个元素的数组
  • 如果你真的有一个非空字符串会中断;这似乎是一种特殊情况,只需检查空字符串即可更轻松地处理。
  • 这确实不能回答问题。正如@mortensen 在此评论中所问的那样,'p,q,r'.split(',').splice() 将返回一个空数组[]
【解决方案2】:

试试这个

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

【讨论】:

  • 我想你希望最后一个 s 是一个空数组。
  • 那你怎么有时间回答呢?
【解决方案3】:

我想应该这样做;

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2011-06-25
      • 2018-08-15
      • 2011-11-15
      • 1970-01-01
      • 2013-03-08
      • 2012-05-12
      • 2019-06-13
      • 2014-05-16
      相关资源
      最近更新 更多