【问题标题】:JS Array.splice return original Array and chain to itJS Array.splice 返回原始数组并链接到它
【发布时间】:2020-09-22 04:04:23
【问题描述】:

我有一个字符串,其值类似于 a,b,c,d,并希望通过索引删除特定字母

这就是我所做的str.split(',').splice(1,1).toString(),这(显然)不起作用,因为splice 正在返回删除的值而不是原始数组

有没有办法在一个班轮中完成上述工作?

var str = "a,b,c,d";
console.log(str.split(',').splice(1,1).toString());

提前致谢。

【问题讨论】:

标签: javascript splice


【解决方案1】:

您可以使用filter 并将condition 添加为index != 1

var str = "a,b,c,d";
console.log(str.split(',').filter((x, i) => i != 1).toString());

【讨论】:

  • 你知道在性能方面,这会比只用两行来更快吗?
  • 过滤器是O(n),而拼接是O(1)。但是这种简单情况下的性能差异确实可以忽略不计。
  • 请查看medium.com/@justintulk/… 以了解性能。 splice 绝对是faster
【解决方案2】:

另一个奇怪的解决方案。解构数组,删除不需要的索引,获取一个对象并连接它的值。

var string = "a,b,c,d",
    { 1: _, ...temp } = string.split(',')

console.log(Object.values(temp).join(','));

【讨论】:

    【解决方案3】:

    使用正则表达式替换的替代方式

    var str = "a,b,c,d";
    
    console.log(str.replace(/,\w+/, ''))

    【讨论】:

    • 我试着想了一个,但我总是在脑海中添加 /g :)
    • @mplungjan /g 成为一种习惯 :)
    【解决方案4】:

    拼接工作到位,所以oneliner是

    const arr = "a,b,c,d".split(','); arr.splice(1,1); console.log(arr.toString());

    如果你想在 oneliner 中使用字符串,你必须在过滤器中硬编码索引

    console.log("a,b,c,d".split(',').filter((item, i) => i != 1).toString())

    或两个切片(根本没有性能)

    const arr = "a,b,c,d".split(',')
    console.log([...arr.slice(0,1),...arr.slice(2)].toString())

    【讨论】:

    • 我猜您需要使用分号而不是换行符 - OP 要求使用单行 :-)
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2020-08-19
    • 2012-07-28
    相关资源
    最近更新 更多