通过计算字符长度,将一个JS数组拆分和并列成块。

问题描述 投票:0回答:1

假设我有一个数组,如下所示。

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 দিয়ে ধুয়ে ফেলবেন, ৪।পরিবারের সবার চিকিৎসা করতে হবে।, ৫।কবিরাজী ও হোমিওপাথি করবেন না, ৬।ডাক্তার এর পরামর্শ বাতিত ওষুধ বন্ধ করবেন না।"
];

所以,再一次,要求是简短的。

  1. 从一个给定的数组中创建一个新的数组 通过连接元素和新数组元素的字符大小应该是 <=300
  2. 如果给定数组中任何元素的字符大小是 >300 以300为限打破它,并将其拼接到给定的数组中,并继续要求一个数组。
javascript arrays loops split reduce
1个回答
2
投票

你可以做一个最佳的方式使用 .matchRegEx 类似这样的-。

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))

希望这能帮到你...


0
投票

另一种方法是用一个简单的 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)

0
投票

好吧,感谢大家花时间解决我的问题,虽然没有达到我的要求。不管怎么说,终于,我用传统的循环解决了。

我写了三个函数来解决这个问题,一个函数是针对第一个要求的,另外两个函数是针对第二个要求的。

函数一。 我传入了两个参数,一个是数组的参数,另一个是字符限制的长度。

在第一个函数里面,我调用了第二个函数,把给定的数组传到那里,然后把结果作为输入数组存储。

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));
© www.soinside.com 2019 - 2024. All rights reserved.