【问题标题】:Split string at different size以不同大小拆分字符串
【发布时间】:2018-03-10 19:13:06
【问题描述】:

我有一个这样的字符串:

var s = 'Lorem ipsum dolor sit amet';

我想要一个这样的数组:

var l = [3, 3, 3, 1, 2, 5, 4, 1, 2, 1];
var a = ['Lor', 'em ', 'ips', 'u', 'm ', 'dolor', ' sit', 'a', 'me', 't'];

细分的长度不同。

我先验地知道我希望第一个元素的长度为 3 (Lor),第二个 3 (em),第三个 3 (ips),第四个 1 (u),第五个2(m),第六个5(dolor),第七个4(sit),第八个1(a),第九个2(me),第十个1(@ 987654332@).

我该怎么办?

【问题讨论】:

  • 你从哪里得到长度序列?
  • @NinaScholz 例如,来自数组。我编辑我的主要信息
  • sit amet 之间有一个空格,您在数组 a 中忽略。

标签: javascript string split


【解决方案1】:

您可以映射单个长度的部分。

它适用于最后一个位置p的闭包

(p => i => string.slice(p, p += i))(0)
(p =>                             )(0) // call function with zero as p and return cb
      i => string.slice(p, p += i)     // callback for map

var lengths = [3, 3, 3, 1, 2, 5, 4, 1, 2, 1],
    string = 'Lorem ipsum dolor sit amet',
    result = lengths.map((p => i => string.slice(p, p += i))(0));
    
console.log(result);

【讨论】:

    【解决方案2】:

    这样就可以了。但是您的问题令人困惑;倒数第三个元素的长度是 2,而不是 1。

    var s = 'Lorem ipsum dolor sit amet';
    
    var a = ['Lor', 'em ', 'ips', 'u', 'm ', 'dolor', ' sit', 'a', 'me', 't'];
    
    var splitAt = [3, 3, 3, 1, 2, 5, 4, 2, 2, 1];
    
    function splitByLengths(str, arr){
      var id = 0;
      var outputArr = [];
      arr.forEach(function(len){
        outputArr.push(str.slice(id, id+len));
        id += len;
     
      });
      return outputArr;
    }
    console.log(splitByLengths(s, splitAt));
    console.log("as expected?", splitByLengths(s, splitAt) === a);

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 2020-06-05
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2013-04-18
      相关资源
      最近更新 更多