我想遍历字符串集,并通过删除两个字符并将它们存储到数组中将它们分成子字符串。 假设返回了两个字符串,字符数将始终是2的倍数。
AADDFFCC
GGDD
第一个字符串将给我AADDFF,AADD,AA
第二个字符串将给我GG
。
我想将所有子字符串存储到单个数组中。
因此,基于以上示例,我应该得出结论。
subString = ["AADDFF","AADD","AA","GG"]
这是我不完整的尝试。
var StringArray = ["AADDFFCC","GGDD"] //this could be indefinite length
var subString = [];
var StringArrayLength = StringArray.length;
var loopCurrentString;
var loopCurrentSubString
for (var i = 0; i < StringArrayLength; i += 2) {
loopCurrentString = StringArray[i];
loopCurrentSubString = loopCurrentString.substring(0, loopCurrentString.length - 2);
}
答案 0 :(得分:1)
for (var i = 0; i < StringArrayLength; i ++) {
//get element
loopCurrentString = StringArray[i];
//add substrings in the array
while(loopCurrentString.length>2){
loopCurrentSubString = loopCurrentString.substring(0, loopCurrentString.length - 2);
substring.push(loopCurrentSubString);
}
}
答案 1 :(得分:0)
这是带有嵌套for loops
的实现:
const data = ["AADDFFCC", "GGDD"]
const endResult = []
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j += 2) {
if (j != 0)
endResult.push(data[i].slice(0, data[i].length - j))
}
}
console.log(endResult)
您可以通过使用reduceRight
从右侧开始将数组切成所需的块来完成此操作:
const data = ["AADDFFCC","GGDD"]
const chunkBy = (arr, by=2) => [...arr].reduceRight((r,c,i,a) =>
((((a.length-1) - i)%by == 0 && a.length-1 != i) ?
r.push(a.slice(0, i+1).reduce((r,c) => `${r}${c}`)) :
0, r),[])
console.log(data.reduce((r,c) => [...chunkBy(r), ...chunkBy(c)]))
最后,通过ES6传播算子将它们缝合在一起。