假设我有一个数组,如下所示。
let inputArr = [
"Name: Jarina Begum↵Age: 70 years↵↵",
"Tab. Mycofree (250 mg)↵১ + 0 + ১/২ টা -- ১.৫ মাস -- খাওয়ার পরে↵",
"Cap. Losectil (20 mg)↵১ + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার আগে↵",
"Tab. Rupin (10 mg)↵0 + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার পরে↵",
"Savoy Sulphur Soap↵.১.৫ মাস -- নিয়মিত ব্যবহার করবেন।↵",
"Advices:",
"১।নিয়মিত ওষুধ সেবন করবেন।, ",
"২।সাধারন সাবান লাগাবেন না।, ",
"৩।পরিধেয় জামা কাপড় Savlon/Detol দিয়ে ধুয়ে ফেলবেন, ",
"৪।পরিবারের সবার চিকিৎসা করতে হবে।, ",
"৫।কবিরাজী ও হোমিওপাথি করবেন না, ",
"৬।ডাক্তার এর পরামর্শ বাতিত ওষুধ বন্ধ করবেন না।"
];
我想从上面的数组中建立一个新的数组 其中每个元素的字符大小应该是: <=300.
所以,我必须把这些元素一个接一个地连接起来,并计算这些元素的数量。character size
& index
循环,当串联字符串的大小超过极限时[比如说在本例中,300];然后将其推入一个新的数组,并从下一个索引开始计算字符,作为从0开始的字符大小。
这个循环将继续下去,直到最后一个索引的 inputArr
.
我还确保任何元素的大小是 >300 然后我必须打破这个元素的300个限制。
预期的输出会像下面这样。
[
"Name: Jarina Begum↵Age: 70 years↵↵Tab. Mycofree (250 mg)↵১ + 0 + ১/২ টা -- ১.৫ মাস -- খাওয়ার পরে↵Cap. Losectil (20 mg)↵১ + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার আগে↵Tab. Rupin (10 mg)↵0 + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার পরে↵Savoy Sulphur Soap↵.১.৫ মাস -- নিয়মিত ব্যবহার করবেন।↵Advices:",
"১।নিয়মিত ওষুধ সেবন করবেন।, ২।সাধারন সাবান লাগাবেন না।, ৩।পরিধেয় জামা কাপড় Savlon/Detol দিয়ে ধুয়ে ফেলবেন, ৪।পরিবারের সবার চিকিৎসা করতে হবে।, ৫।কবিরাজী ও হোমিওপাথি করবেন না, ৬।ডাক্তার এর পরামর্শ বাতিত ওষুধ বন্ধ করবেন না।"
];
所以,再一次,要求是简短的。
你可以做一个最佳的方式使用 .match
和 RegEx
类似这样的-。
let charLimitArray = inputArr.join().match(/.{1,300}/g)
console.log(charLimitArray);
let inputArr = [
"Name: Jarina Begum↵Age: 70 years ↵↵",
"Tab. Mycofree (250 mg)↵১ + 0 + ১/২ টা -- ১.৫ মাস -- খাওয়ার পরে↵",
"Cap. Losectil (20 mg)↵১ + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার আগে↵",
"Tab. Rupin (10 mg)↵0 + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার পরে↵",
"Savoy Sulphur Soap↵.১.৫ মাস -- নিয়েমিত ব্যবহার করবেন।↵",
"Advices:",
"১।নিয়মিত ওষুধ সেবন করবেন।, ",
"২।সাধারন সাবান লাগাবেন না।, ",
"৩।পরিধেয় জামা কাপড় Savlon/Detol দিয়ে ধুয়ে ফেলবেন, ",
"৪। পরিবারের সবার চিকিৎসা করতে হবে।, ",
"৫।কবিরাজী ও হমিওপাথি করবেন না, ",
"৬।ডাক্তার এর পরামর্শ বাতিত অষুধ বন্দ করবেন না।"
];
console.log(inputArr.join().match(/.{1,300}/g))
希望这能帮到你...
另一种方法是用一个简单的 for
循环。
let inputArr = [
"Name: Jarina Begum↵Age: 70 years ↵↵",
"Tab. Mycofree (250 mg)↵১ + 0 + ১/২ টা -- ১.৫ মাস -- খাওয়ার পরে↵",
"Cap. Losectil (20 mg)↵১ + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার আগে↵",
"Tab. Rupin (10 mg)↵0 + 0 + ১ টা -- .১.৫ মাস -- খাওয়ার পরে↵",
"Savoy Sulphur Soap↵.১.৫ মাস -- নিয়েমিত ব্যবহার করবেন।↵",
"Advices:",
"১।নিয়মিত ওষুধ সেবন করবেন।, ",
"২।সাধারন সাবান লাগাবেন না।, ",
"৩।পরিধেয় জামা কাপড় Savlon/Detol দিয়ে ধুয়ে ফেলবেন, ",
"৪। পরিবারের সবার চিকিৎসা করতে হবে।, ",
"৫।কবিরাজী ও হমিওপাথি করবেন না, ",
"৬।ডাক্তার এর পরামর্শ বাতিত অষুধ বন্দ করবেন না।"
];
let expectedArr = [];
let driverString = '';
var count = 0;
var length_= 0;
for(var i = 0; i < inputArr.length; i++){
length_ = inputArr[i]+ driverString;
if(length_.length <= 300 ){
driverString = driverString + inputArr[i];
}else{
driverString = '';
driverString = driverString + inputArr[i];
count++;
length_= 0;
}
expectedArr[count] = driverString;
}
console.log(expectedArr,expectedArr.length)
好吧,感谢大家花时间解决我的问题,虽然没有达到我的要求。不管怎么说,终于,我用传统的循环解决了。
我写了三个函数来解决这个问题,一个函数是针对第一个要求的,另外两个函数是针对第二个要求的。
函数一。 我传入了两个参数,一个是数组的参数,另一个是字符限制的长度。
在第一个函数里面,我调用了第二个函数,把给定的数组传到那里,然后把结果作为输入数组存储。
const chunkSmsArr = (arr, len=300) => {
let inputArr = checkElLength(arr, len);
let outputArr = [],
msgString = '',
count = 0;
for(let i=0; i<inputArr.length; i++) {
if( (msgString+inputArr[i]).length <= len ) {
msgString += inputArr[i];
} else {
msgString = '';
msgString += inputArr[i];
count++;
}
outputArr[count] = msgString;
}
return outputArr;
}
函数二。 这个函数检查给定数组中的每一个元素,如果发现任何一个元素的长度 >300然后调用第三个函数,将字符串分解成数组,并在当前迭代的位置进行拼接。
const checkElLength = (inputArr, len) => {
let outputArr = [];
for(let i=0; i<inputArr.length; i++) {
if (inputArr[i].length > len) {
let breakedSmsArr = breakSmsArrString(inputArr[i], len);
inputArr.splice(i, 1, ...breakedSmsArr);
}
}
outputArr = inputArr;
return outputArr;
}
函数三。 其中我还传递了两个参数,一个是我需要将字符串分解成数组元素, 另一个是字符限制的长度。
const breakSmsArrString = (str, len) => {
let curr = len, prev = 0;
let output = [];
while(str[curr]) {
if(str[curr++] == ' ') {
output.push(str.substring(prev,curr));
prev = curr;
curr += len;
} else {
let currReverse = curr;
do {
if(str.substring(currReverse - 1, currReverse) == ' ') {
output.push(str.substring(prev,currReverse));
prev = currReverse;
curr = currReverse + len;
break;
}
currReverse--;
} while(currReverse > prev)
}
}
output.push(str.substr(prev));
return output;
}
所以,现在你可以用 console.log
来查看输出。
console.log(chunkArr(inputArr, 300));