【问题标题】:JS get max first n values from a stringJS从字符串中获取最大前n个值
【发布时间】:2021-06-10 14:14:30
【问题描述】:

我需要捕获string 的最多 5 个元素。但是,如果少于 5 个,那么我只需要有多少个。

var y = '1,2,3,4,5,6,7,8,9,10'        
//desired result: 
var out = '1,2,3,4,5' // please note there is no trailing comma



var y = '1,2,3'
//desired result: 
var out = '1,2,3' 

我的代码:

  for (var i = 0; i < 5; i++) {
    x += y;
     x = x + ",";
   }


Write(x);

【问题讨论】:

  • 你的 sn-p 中xy 的值是多少?
  • 在你的前两个例子中,一个去掉了空格,另一个没有。请确保两个示例都遵循相同的规则集。
  • y 是字符串,x 是我要存储结果输出字符串的输出的变量
  • 那么数字列表总是按顺序排列的吗?
  • @epascarello 它总是按照我需要的正确顺序。但是,它也可能是6,5,4,3,2,1。在这种情况下仍然需要前 5 个元素,即 6,5,4,3,2

标签: javascript string loops


【解决方案1】:

一个简单的方法就可以了。下面将字符串按, 拆分,然后采用n 元素或总长度(如果它小于n),然后用逗号重新加入这些值

const getNValues = (str, n) => {
   const values = str.split(",");
   const res = values.slice(0, Math.min(values.length,n))
   return res.join(",");
}


console.log(getNValues("1,2,3,4,5,6,7,8,9",5));
console.log(getNValues("1,2,3",5));

【讨论】:

    【解决方案2】:

    试试这个简单的功能来做到这一点

    function getMaxLen(str) {
      if(typeof str != 'string') return null;
      str = str.split(',');
      return str.slice(0, 5).join(',');
    }
    
    console.log(getMaxLen('1,2,3,4,5,6,7,8,9,10'))
    console.log(getMaxLen('1,2,3'))

    【讨论】:

    • 不错的一个!这也很好用:)
    【解决方案3】:
    var string = '1, 2, 3, 4, 5, 6, 7, 8, 9, 10';
    var out = (string.match(/^([0-9],? ?){0,5}/)[0] || '').replace(/, ?$/, '');
    console.log(out)
    

    [编辑] 解释 .match(^([0-9],? ?){0,5}/g):

    • 从乞讨开始^
    • 匹配号码[0-9]
    • 然后是逗号(如果有)和空格(如果有),? ?
    • 匹配这个表达式0到5次{0, 5}

    【讨论】:

    • 这似乎工作得很好!但是,如果字符串是五个或更少,则它不会捕获最后一个元素。例如1, 2, 3, 4 那么输出是1, 2, 3
    • 已更新,在, ? 表达式上忘记了一点?
    • @apples-oranges 哦哦哦哦。此任务的正则表达式完全矫枉过正!
    • @apples-oranges 如果您正在寻找性能,这确实是一种矫枉过正,我将其发布为替代方案,因为已经给出了其他解决方案,但我建议使用 split 方法来提高性能和可读性
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多