【问题标题】:ruby insert equivalent in javascriptjavascript中的ruby插入等效项
【发布时间】:2021-06-11 08:30:04
【问题描述】:

如果我有这样的字符串:"4589" 我可以在 ruby​​ 中做到这一点:

str.insert(-4,' ')

返回:"4 589"

在 javascript 中是否有类似的可能,还是我需要使用 split、splice 和 join 编写函数?

【问题讨论】:

  • 不,没有。是的,你必须这样做。
  • @thiebo 我不知道为什么它被否决了。 Ruby 有许多 JavaScript 没有的处理字符串和数组的方法,所以你必须做一些低级的事情来完成它们。范围,举个我经常想到的例子。

标签: javascript ruby string


【解决方案1】:

基元是不可变的,除了正则表达式的.replace 之外,没有任何单一方法可以做你想做的事,这可能太深奥了,不值得使用:

str.replace(/(?=.{3}$)/, ' ')

但是没有必要将字符串变成数组来添加空格——你也可以使用.slice两次,取4部分,与空格连接,并与另一个.slice连接。

const str = '4589';
const newStr = str.slice(0, 1) + ' ' + str.slice(1);
console.log(newStr);

【讨论】:

    【解决方案2】:

    没有内置的单一东西可以为您完成,所以是的,您可能需要一个函数,但它不必像split、@987654324 那样复杂@ 和join:

    function insert(str, index, segment) {
        return str.slice(0, index) + segment + str.slice(index);
    }
    

    (它不能修改字符串,因为字符串在 JavaScript 中是不可变的。所以它会返回新的字符串。)

    现场示例:

    function insert(str, index, segment) {
        return str.slice(0, index) + segment + str.slice(index);
    }
    
    console.log(insert("4589", -3, " "));

    注意:在这方面,我坚持使用标准 JavaScript 实践,其中使用 length + index 计算负索引并指定从何处开始操作。因此,我使用 -3 代替上面示例中的 -4 来获得使用 Ruby 的 -4 得到的结果。我惊讶地发现Ruby's insert 进行了该计算,但随后插入结果加一(但仅当索引为负数时)。这在 JavaScript 函数中会很奇怪,所以我上面没有这样做。不过你可以:

    function rubyInsert(str, index, segment) {
        if (index < 0) {
            ++index;
        }
        return str.slice(0, index) + segment + str.slice(index);
    }
    

    现场示例:

    function rubyInsert(str, index, segment) {
        if (index < 0) {
            ++index;
        }
        return str.slice(0, index) + segment + str.slice(index);
    }
    
    console.log(rubyInsert("4589", -4, " "));

    【讨论】:

    • 对我来说也有点神秘,但不,“-4”不是错字
    • @thiebo - Sure enough,它在索引 + 1 处插入...但仅当索引为负时。怎么……奇怪……
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 2012-05-14
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多