我有一个像这样的字符串:
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
)。
我该怎么办?
答案 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);