【问题标题】:Getting the last element of a split string array获取拆分字符串数组的最后一个元素
【发布时间】:2010-10-13 16:29:39
【问题描述】:

我需要获取具有多个分隔符的拆分数组的最后一个元素。分隔符是逗号和空格。如果没有分隔符,它应该返回原始字符串。

如果字符串是“你今天过得怎么样?”它应该返回“今天?”

如果输入是“hello”,则输出应该是“hello”。

如何在 JavaScript 中做到这一点?

【问题讨论】:

    标签: javascript split


    【解决方案1】:

    const str = "hello,how,are,you,today?"
    const pieces = str.split(/[\s,]+/)
    const last = pieces[pieces.length - 1]
    
    console.log({last})

    此时,pieces 是一个数组,pieces.length 包含数组的大小,因此要获取数组的最后一个元素,请检查 pieces[pieces.length-1]。如果没有逗号或空格,它将简单地输出给定的字符串。

    alert(pieces[pieces.length-1]); // alerts "today?"
    

    【讨论】:

    • 您也可以使用pieces.pop() 来获取数组的最后一项。
    • 有没有办法使用它来引用 str.split() 而不必存储变量?
    • var last = str.split(/[\s,]+/).pop()
    【解决方案2】:

    每件事都有一条线。 :)

    var output = input.split(/[, ]+/).pop();
    

    【讨论】:

    • 这里的问题是 pop() 也会从数组中删除该元素,从而改变它。
    • @Jangla:这不是问题,因为数组是由split 调用创建的,无论如何它都不会保留。从数组中弹出项目不会更改原始字符串。
    • 太棒了,一口气完成,不需要中间变量来设置数组...很好
    • @VitorGuerreiro:是的,您可以使用slice 方法:var output = input.split(/[, ]+/).slice(-2);
    • @MarioLevrero:这是一个量词,其含义与量词{1,} 相同,即[, ]+ 匹配集合中的一个或多个字符(逗号和空格)。当您想要字符串中的所有单词时,它很有用,但是当您只想要最后一个单词时,它不会产生任何功能差异,它只会减少开销,因为数组中的字符串会更少。
    【解决方案3】:

    如果你不想构造一个数组...

    var str = "how,are you doing, today?";
    var res = str.replace(/(.*)([, ])([^, ]*$)/,"$3");
    

    英文细分为:

    /(anything)(any separator once)(anything that isn't a separator 0 or more times)/
    

    替换只是说用最后一个分隔符之后的东西替换整个字符串。

    因此,您可以看到如何普遍应用它。注意原始字符串没有被修改。

    【讨论】:

      【解决方案4】:
      var item = "one,two,three";
      var lastItem = item.split(",").pop();
      console.log(lastItem); // three
      

      【讨论】:

      • 我不认为 pop() 需要参数。
      • 但是,一般来说.split(',').pop() 适用于逗号分隔字符串上的最后一个元素。只是说因为我被 Guffa 的真棒答案误导了,我只是忽略了它,因为不需要正则表达式并认为诀窍就在那里! :P
      【解决方案5】:
      var title = 'fdfdsg dsgdfh dgdh dsgdh tyu hjuk yjuk uyk hjg fhjg hjj tytutdfsf sdgsdg dsfsdgvf dfgfdhdn dfgilkj,n, jhk jsu wheiu sjldsf dfdsf hfdkdjf dfhdfkd hsfd ,dsfk dfjdf ,yier djsgyi kds';
      var shortText = $.trim(title).substring(1000, 150).split(" ").slice(0, -1).join(" ") + "...More >>";
      

      【讨论】:

        【解决方案6】:

        可以直接访问数组索引:

        var csv = 'zero,one,two,three'; csv.split(',')[0]; //result: zero csv.split(',')[3]; //result: three

        【讨论】:

        • 你好tnong,欢迎来到SO!我认为这个答案没有按照问题的要求考虑空格分隔符。
        • 这个答案不支持任意字符串数组长度
        【解决方案7】:

        使用splitslice 的有史以来最好的和我最喜欢的

        const str = "hello, how are you today?"
        const last = str.split(' ').slice(-1)[0]
        console.log({last})

        另一个使用split 然后pop 最后一个。

        const str = "hello, how are you today?"
        const last = str.split(' ').pop()
        console.log({last})

        【讨论】:

        • 啊当然。这是一个很好的答案,因为它不会改变原来的 +1
        • 在切片之后使用.pop() 仍然是一个很好的便利。没有突变,因为访问器方法返回一个新数组。
        【解决方案8】:

        您还可以考虑反转数组并获取第一个元素。这样你就不必知道长度,但它没有带来真正的好处,缺点是反向操作可能需要更长的时间来处理大数组:

        array1.split(",").reverse()[0]
        

        虽然很简单,但也修改了有问题的原始数组。这可能是也可能不是问题。

        参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

        也许你可能想用这个:

        array1.split(",").pop()
        

        【讨论】:

        • .pop() 方法是迄今为止我见过的最好的答案。这就是它被创建的原因!
        • 我强烈建议不要使用 reverse(),因为在大型阵列上进行反转会很昂贵。如果您不关心突变,只需使用 pop(),否则使用 slice(-1)[0]。
        • 它增加了时间复杂度,因为你有一个额外的循环来反转数组。
        【解决方案9】:

        有多种方法可以获取最后一个元素

        let input='one,two,three,four';
        
        let output1 = input.split(',').pop();
        console.log('output1 =',output1);
        
        let split = input.split(',');
        let output2 = split[split.length-1];
        console.log('output2=',output2);
        
        let output3 = input.split(',').reverse()[0];
        console.log('output3=',output3);
        
        let output4 = input.split(',').slice(-1)[0];
        console.log('output4=',output4);

        【讨论】:

          【解决方案10】:

          这种方式很容易理解,也很简短。

          const output = input.split(',').pop().split(' ').pop();
          

          【讨论】:

            猜你喜欢
            • 2018-12-26
            • 2016-09-20
            • 2020-08-25
            • 2013-01-02
            • 1970-01-01
            • 2015-11-12
            • 2014-02-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多