Разделить / разбить строку на основе пробелов по n-значению - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь разделить строку на основе пробелов в строке, если я разделю строку на значение, вывод должен быть массив с 3 значениями

У меня есть эта строка, например "SIZZLING STEAK TERIYAKI BOY "и я хочу разделить эту строку на 3 на основе пробелов, вывод должен быть [" SIZZLING STEAK "," TERIYAKI "," BOY "];

Другой пример - моя строка" POWERVILLE " FUN RIDES "и если я разделю это на 2, вывод должен быть [" POWERVILLE FUN "," RIDES "], и если я разделю эту строку на 3, вывод должен быть [" POWERVILLE "," FUN "," RIDES "];

function getSplitedText(number, word) { 
 let splitedText = word.split(" ");
 let a = "";
 let b = [];
 let ctr = 1;
 for (let i = 0; i < splitedText.length; i++) {
  if (ctr === Math.ceil(splitedText.length / number)) {
   a += splitedText[i];
   b.push(a);
   a = "";
   ctr = 1;
 } else {
   a += splitedText[i] += " ";
   ctr++;
 }

 if (i === splitedText.length - 1) {
   if (a !== "")  b.push(a);
 }
}

return b;
}

let ans = getSplitedText(3, "SIZZLING STEAK TERIYAKI BOY");
document.write(ans)

Вот мой текущий код для этого: https://jsfiddle.net/nesvcz1w/ на этой скрипке строка" SIZZLING STEAK TERIYAKI BOY "стала [" SIZZLING STEAK, TERIYAKI BOY " "], что неправильно, это должно быть [" SIZZLING STEAK "," TERIYAKI "," BOY "];

Ответы [ 4 ]

1 голос
/ 19 апреля 2020

Сначала мы можем разбить нашу строку на слова массива. Давайте назовем это splitted. Затем мы можем принять решение на основе breaker, должно ли слово объединяться или вставляться как целое слово:

fooDivider = (str, num) => {
    let splitted = str.split(' ');
    let breaker = (splitted.length - num) + 1;

    const joined = splitted.splice(0, breaker).join(' ');
    return [joined, ...splitted];
}

Пример:

let str = "POWERVILLE FUN RIDES";

fooDivider = (str, num) => {
   let splitted = str.split(' ');
   let breaker = (splitted.length - num) + 1;

   const joined = splitted.splice(0, breaker).join(' ');
   return [joined, ...splitted];
}

console.log(fooDivider("SIZZLING STEAK TERIYAKI BOY", 3));
console.log(fooDivider("POWERVILLE FUN RIDES", 2));
0 голосов
/ 19 апреля 2020

Возможно, вы можете сделать как;

function fun(t,n){
  var ws = t.split(/\s+/);
  return [].concat( ws.slice(0,n)
                      .join(" ")
                  , ws.slice(n)
                  );
}

var t1 = "SIZZLING STEAK TERIYAKI BOY",
    t2 = "POWERVILLE FUN RIDES";

console.log(fun(t1,2));
console.log(fun(t2,2));
0 голосов
/ 19 апреля 2020

Это подойдет вашим потребностям.

  function getSplitedText(number, word) {
    var indexes = dotIndexes(word);
    let splitedText = word.split(" ");
    if (number == indexes.length + 1) {
      //full parse
      return splitedText;
    } else {
      //just latest ones
      let combinedParts = "";
      let partsOfResult = [number];
      for (let counter = 0; counter < splitedText.length; counter++) {
        var element = splitedText[counter];
        if (counter > 1) {
          partsOfResult[counter-1] = element;
          //console.log("seperate :" + splitedText[counter] + counter);
        } else {
          combinedParts += " ";
          combinedParts += element;
          //console.log("combine :" + splitedText[counter] + counter);
        }
      }
      combinedParts = combinedParts.trim();
      partsOfResult[0] = combinedParts;      
      return partsOfResult;
    }
  }
  function dotIndexes(word) {
    var indices = [];
    for (var i = 0; i < word.length; i++) {
      if (word[i] === " ") indices.push(i);
    }
    return indices;
  }
  var myWord = "SIZZLING STEAK TERIYAKI BOY";
  var myWord2 = "POWERVILLE FUN RIDES";
  console.log(getSplitedText(3, myWord));
  console.log(getSplitedText(4, myWord));
  console.log(getSplitedText(2, myWord2));
  console.log(getSplitedText(3, myWord2));
0 голосов
/ 19 апреля 2020
const splitText = (str, n) => {
  const strArray = str.split(" ");
  if(n === strArray.length) {
    return strArray;
  } else if(n < strArray.length) {
    const combine = strArray.slice(0, (strArray.length-n)+1)
    const defaultSet = strArray.slice((strArray.length-n)+1, strArray.length)
    return [...[combine.join(" ")], ...defaultSet]
  } else {
    return []
  }
}

const ans1 = splitText("SIZZLING STEAK TERIYAKI BOY", 3);
console.log("ans 1", ans1);
const ans2 = splitText("POWERVILLE FUN RIDES", 2);
console.log("ans 2", ans2);
const ans3 = splitText("POWERVILLE FUN RIDES", 3);
console.log("ans 3", ans3);

Надеюсь, это решит вашу проблему.

...