Javascript 在指定字符和最大长度(JS)处断开长字符串
也许有一个比我的更干净、更有效的安舍,但我找不到。所以我自己也试过了,到目前为止没有什么结果 var str=个人:艾米、伯莎、查理、驴子、埃维、费利西亚、古特、大力士、印度、朱迪、凯蒂、林赛、穆尼、奈杰尔、奥佩特里、菲尔、昆顿、蓖麻、斯蒂芬、特鲁迪、厄斯拉、弗林德、温迪、雄、伊夫、祖鲁;//人名来自数组 var maxCount=100; var jki=Math.floorstr.length/maxCount; var i=0; arr=[]; var起始点=0;Javascript 在指定字符和最大长度(JS)处断开长字符串,javascript,Javascript,也许有一个比我的更干净、更有效的安舍,但我找不到。所以我自己也试过了,到目前为止没有什么结果 var str=个人:艾米、伯莎、查理、驴子、埃维、费利西亚、古特、大力士、印度、朱迪、凯蒂、林赛、穆尼、奈杰尔、奥佩特里、菲尔、昆顿、蓖麻、斯蒂芬、特鲁迪、厄斯拉、弗林德、温迪、雄、伊夫、祖鲁;//人名来自数组 var maxCount=100; var jki=Math.floorstr.length/maxCount; var i=0; arr=[]; var起始点=0; 而我所以我花了时间根据
而我所以我花了时间根据你的标准让它真正起作用。注释中解释了所有步骤 var str=人:艾米、伯莎、查理、驴子、埃维、费利西亚、古特、大力士、印度卡、朱迪、凯蒂、林赛、穆尼、奈杰尔、奥佩特里、菲尔、昆顿、里奇尔、斯蒂芬、特鲁迪、厄斯拉、弗林德、温迪、雄、伊夫、祖鲁; var maxCount=100; var splitNames=functionstr,最大值{ //[人:,艾米,伯莎,,…] 变量名称=str.split“”, 行=[], 直线=0, 线宽=0; //循环遍历我们的名称数组 name.forEachfunctionname{ //如果长度超过我们的最大值 iflineLength+name.length+1>最大值{ 行+=1;//移动到下一行 lineLength=0;//重置长度计数器 }否则{ lineLength+=1;//为稍后添加的空间添加1 } //如果没有空数组,请确保添加空数组 行[行]=行[行]| |[]; //添加当前名称 行[line].pushname; //将名称长度添加到行长度 lineLength+=name.length; }; 返回行.mapfunctionline{ //把我们的名字和一个空格连在一起,我们把空格数在长度上 返回行。加入“”; }; }
console.logsplitNamesstr,maxCount 所以我花了点时间让它按照你的标准工作。注释中解释了所有步骤 var str=人:艾米、伯莎、查理、驴子、埃维、费利西亚、古特、大力士、印度卡、朱迪、凯蒂、林赛、穆尼、奈杰尔、奥佩特里、菲尔、昆顿、里奇尔、斯蒂芬、特鲁迪、厄斯拉、弗林德、温迪、雄、伊夫、祖鲁; var maxCount=100; var splitNames=functionstr,最大值{ //[人:,艾米,伯莎,,…] 变量名称=str.split“”, 行=[], 直线=0, 线宽=0; //循环遍历我们的名称数组 name.forEachfunctionname{ //如果长度超过我们的最大值 iflineLength+name.length+1>最大值{ 行+=1;//移动到下一行 lineLength=0;//重置长度计数器 }否则{ lineLength+=1;//为稍后添加的空间添加1 } //如果没有空数组,请确保添加空数组 行[行]=行[行]| |[]; //添加当前名称 行[line].pushname; //将名称长度添加到行长度 lineLength+=name.length; }; 返回行.mapfunctionline{ //把我们的名字和一个空格连在一起,我们把空格数在长度上 返回行。加入“”; }; }
console.logsplitNamesstr,maxCount 你错过的东西很少。最重要的一点是,您应该从startPoint开始下一个切片,而不是从i*maxCount-maxCount开始。另一个大问题是lastIndexOf将从片段的开头开始计数,而不是从原始字符串的开头开始计数,对于除第一个片段以外的所有片段,原始字符串的开头将小于maxCount,然后小于startPoint。这就是为什么第二个块是空的。和第一个大片段相结合,它使最后一个块从say开始,就像它从前一个块中最后一个空格的位置开始一样 您还应该注意最后一块,不要被最后一个空格切断,因为末尾可能没有空格。还要注意那些可能没有空间的切片。最后,即使str.length/maxCount是整数,块的数量也可能不是Math.floorstr.length/maxCount 为了说明这一点,我采取了自由的方式来解决它,我看到你正在试图做什么
var str = "Persons: Amy, bertha, Charlie, Donkey, Evy, Felicia, Ghunter, Hercules, Indica, Jody, Katy, Linsay, Moony, Nigel, Opethry, Phil, Quinton, Ricial, Stefany, Trudy, Ursla, Vlinder, Wendy, Xion, Yvy, Zulu";
var maxCount = 100;
var jki = Math.floor(str.length / maxCount);
var arr = [];
var startPoint = 0;
while (startPoint < str.length) {
while (startPoint < str.length && str[startPoint] == ',' || str[startPoint] == ' ') // chop leading commas and spaces off
startPoint++;
var nextSlice;
var nextStart;
if (startPoint + maxCount >= str.length) {
// last chunk goes in completely
nextSlice = str.slice(startPoint);
nextStart = str.length;
}
else {
// not last, chop of by last space if any
nextSlice = str.slice(startPoint, startPoint + maxCount);
nextStart = nextSlice.lastIndexOf(" ");
if (nextStart <= 0) {
nextStart = nextSlice.length;
}
else {
nextStart -= 1;
}
nextStart += startPoint; // adjust for slice starting not at the beginning of str
}
arr.push(str.slice(startPoint, nextStart));
startPoint = nextStart + 1;
}
console.log(arr);
你错过的东西很少。最重要的一点是,您应该从startPoint开始下一个切片,而不是从i*maxCount-maxCount开始。另一个大问题是lastIndexOf将从片段的开头开始计数,而不是从原始字符串的开头开始计数,对于除第一个片段以外的所有片段,原始字符串的开头将小于maxCount,然后小于startPoint。这就是为什么第二个块是空的。和第一个大片段相结合,它使最后一个块从say开始,就像它从前一个块中最后一个空格的位置开始一样 您还应该注意最后一块,不要被最后一个空格切断,因为末尾可能没有空格。还要注意那些可能没有空间的切片。最后,即使str.length/maxCount是整数,块的数量也可能不是Math.floorstr.length/maxCount 为了说明这一点,我选择了自由来修正 这是我看到你想做什么的方式
var str = "Persons: Amy, bertha, Charlie, Donkey, Evy, Felicia, Ghunter, Hercules, Indica, Jody, Katy, Linsay, Moony, Nigel, Opethry, Phil, Quinton, Ricial, Stefany, Trudy, Ursla, Vlinder, Wendy, Xion, Yvy, Zulu";
var maxCount = 100;
var jki = Math.floor(str.length / maxCount);
var arr = [];
var startPoint = 0;
while (startPoint < str.length) {
while (startPoint < str.length && str[startPoint] == ',' || str[startPoint] == ' ') // chop leading commas and spaces off
startPoint++;
var nextSlice;
var nextStart;
if (startPoint + maxCount >= str.length) {
// last chunk goes in completely
nextSlice = str.slice(startPoint);
nextStart = str.length;
}
else {
// not last, chop of by last space if any
nextSlice = str.slice(startPoint, startPoint + maxCount);
nextStart = nextSlice.lastIndexOf(" ");
if (nextStart <= 0) {
nextStart = nextSlice.length;
}
else {
nextStart -= 1;
}
nextStart += startPoint; // adjust for slice starting not at the beginning of str
}
arr.push(str.slice(startPoint, nextStart));
startPoint = nextStart + 1;
}
console.log(arr);
var str=人:艾米、伯莎、查理、驴子、埃维、费利西亚、古特、大力士、印度卡、朱迪、凯蒂、林赛、穆尼、奈杰尔、奥佩特里、菲尔、昆顿、里奇尔、斯蒂芬、特鲁迪、厄斯拉、弗林德、温迪、雄、伊夫、祖鲁;
var arr=str.split“”。映射词=>word.substr0,100.reduceac,word=>{
acc.length+=单词长度+1;
如果附件长度>100{
acc.length=word.length-1;
根据线路推[字];
}否则{
acc.lines[acc.lines.length-1].pushword;
}
返回acc;
},{lines:[[]],长度:-1}.lines.mapline=>line.join';
console.logarr
var str=人:艾米、伯莎、查理、驴子、埃维、费利西亚、古特、大力士、印度卡、朱迪、凯蒂、林赛、穆尼、奈杰尔、奥佩特里、菲尔、昆顿、里奇尔、斯蒂芬、特鲁迪、厄斯拉、弗林德、温迪、雄、伊夫、祖鲁;
var arr=str.split“”。映射词=>word.substr0,100.reduceac,word=>{
acc.length+=单词长度+1;
如果附件长度>100{
acc.length=word.length-1;
根据线路推[字];
}否则{
acc.lines[acc.lines.length-1].pushword;
}
返回acc;
},{lines:[[]],长度:-1}.lines.mapline=>line.join';
console.logarr;看看这个:所以当字符串长度超过100个字符和/或它看到一个特定的字符时,你就尝试拼接它?哪个角色?你想让下一个字符串从该字符开始还是旧字符串从该字符结束?@Mojtaba和如何知道极限参数?@8protons这是我的目标:arr=[str maxLen 100,str maxLen 100],str maxLen 100,str maxLen 100]例如str为301-400个字符long@PhilAndelhofs是的,但您编写了希望字符串以特定字符结尾的命令。哪个角色?字母“c”?一个“?”符号?看看这个:当字符串长度超过100个字符和/或它看到一个特定的字符时,你试图拼接它?哪个角色?你想让下一个字符串从该字符开始还是旧字符串从该字符结束?@Mojtaba和如何知道极限参数?@8protons这是我的目标:arr=[str maxLen 100,str maxLen 100],str maxLen 100,str maxLen 100]例如str为301-400个字符long@PhilAndelhofs是的,但您编写了希望字符串以特定字符结尾的命令。哪个角色?字母“c”?一个“?”的标志?第一眼看到比我自己的好!谢谢你抽出时间!这样更好!没问题!这是一个有趣的挑战:第一眼比我自己的好!谢谢你抽出时间!这样更好!没问题!这是一个有趣的挑战:不用担心!正如ShamSUP已经指出的,这是一个有趣的挑战:不用担心!正如ShamSUP已经指出的,这是一个有趣的挑战: