Разделение и объединение массива JS на куски путем подсчета длины символов - PullRequest
0 голосов
/ 04 мая 2020

Допустим, у меня есть следующий массив:

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 * 1005. *. </p> Итак, я должен объединить элементы один за другим, сосчитать character size & index массива, в то время как размер объединенной строки пересекает предел [скажем, в этом случае, 300]; затем выведите pu sh в новый массив и начните считать символ из следующего индекса с учетом размера символа от 0.

Значение l oop будет продолжаться до последнего индекса 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 </strong>
  2. Если размер символа любого элемента данного массива равен > 300 , разбейте его с пределом 300 и разделить на заданный массив, продолжая требования.

Ответы [ 3 ]

2 голосов
/ 04 мая 2020

Вы можете сделать это оптимальным образом, используя .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))

Надеюсь, это поможет ...

0 голосов
/ 04 мая 2020

Хорошо, спасибо всем, кто потратил время на решение моей проблемы, хотя это не отвечало моим требованиям. В любом случае, наконец, я решил это, используя традиционную l oop.

. Я написал две функции для решения этой проблемы, одна функция для первого требования, а другая для второго требования. .

Функция первая: Когда я передаю два параметра, один для массива, а другой - длину ограничения символов.

const chunkArr = (inputArr=[], len=300) => {
    let outputArr = [];
    let msgString = '';
    let count = 0;

    for(let i=0; i<inputArr.length; i++){
        if( (msgString+inputArr[i]).length <= len ){
            msgString += inputArr[i];
        } else {
            msgString = '';
            if( (msgString+inputArr[i]).length <= len ){
                msgString += inputArr[i];
                count++;
            } else {
                let breakedArr = breakArrString(inputArr[i], len);
                inputArr.splice(i, 1, ...breakedArr);
                msgString += inputArr[i];
                count++;
            }
        }
        outputArr[count] = msgString;
    }

    return outputArr;
}

Функция вторая: Где я также передаю два параметра, один - это строка, которую мне нужно разбить на элементы массива, а другой - длина ограничения символов.

Мне нужно вызвать второй функция внутри первой функции.

const breakArrString = (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));
0 голосов
/ 04 мая 2020

Еще один способ сделать это с помощью простого for l oop.

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