拆分不同大小的字符串

时间:2018-03-10 19:13:06

标签: javascript string split

我有一个像这样的字符串:

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 ),第9个2(me)和第10个(t)。

我该怎么办?

2 个答案:

答案 0 :(得分:6)

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

它适用于最后一个位置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);




答案 1 :(得分:3)

这样做。但你的问题令人困惑;最后一个元素的第3个长度为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);