当前位置: 首页 > 知识库问答 >
问题:

通过计算字符长度将JS数组拆分为块

苏翰学
2023-03-14

假设我有一个如下数组:

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

我想从上面的数组中创建一个新数组,其中每个元素的字符大小应该是

因此,我必须一个接一个地连接元素,计算字符大小

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

所以,再一次,要求是短裤:

  1. 从一个给定的数组中创建一个新数组,通过连接元素和新数组元素的字符大小应该是

共有3个答案

简成仁
2023-03-14

另一种方法是使用简单的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)
邓俊材
2023-03-14

好的,感谢所有花时间解决我问题的人,尽管他们没有满足我的要求。总之,最后,我用传统的循环解决了这个问题。

我已经编写了三个函数来解决这个问题,一个函数用于第一个需求,另外两个函数用于第二个需求。

函数一:我传递两个参数,一个用于数组,另一个用于字符长度限制。

在第一个函数中,我调用了第二个函数,在那里传递给定的数组,并将结果存储为输入数组。

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;
}

函数二:这个函数检查给定数组的每个元素,如果找到任何元素的长度

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(chunkArr(inputArr, 300));

刘琨
2023-03-14

您可以使用来以最佳方式执行此操作。

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

 类似资料:
  • 我的问题涉及在文本中查找包含分号的句子,并查找分号前后的单词数。我知道如何用分号分割所有内容,但是我得到了两个字符串,但我似乎无法计算字符串中的单词? 文本看起来像: 到目前为止,我取得了以下成就: 我使用计数的原因是每次迭代后计数增加1,因此句子被标记。我已经去掉了句子末尾的段落,如果句子中包含分号,我也用分号将它们分开。 到目前为止,我只试着打印单词split,看看它能给我带来什么。

  • 问题内容: 有没有办法在不知道字符串长度的情况下,将一个字符长的字符串切成4个字符串,每个字符长? 例如: 问题答案:

  • 我想知道实际上是如何工作的。我认为这是一种计算数组长度的简单方法,并希望在使用它之前适当地理解它。我对指针算术不是很有经验,但根据我的理解,给出了数组第一个元素的地址。将按地址转到数组的末尾。但是不应该给出这个地址的值吗。而是打印出地址。我真的很感激你帮我把指针的东西弄清楚。 下面是我正在研究的一个简单示例:

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 本文向大家介绍JavaScript 将字符串拆分为数组,包括了JavaScript 将字符串拆分为数组的使用技巧和注意事项,需要的朋友参考一下 例子 用于.split从字符串到拆分子字符串的数组: 使用数组方法 .join返回字符串:            

  • 问题内容: 我需要将一个String拆分为单个字符String的数组。 例如,拆分“ cat”将得到数组“ c”,“ a”,“ t” 问题答案: 这将产生