根据空格将字符串除以/分割n值

时间:2020-04-19 13:33:55

标签: javascript html arrays algorithm split

我正在尝试根据字符串上的空格对字符串进行划分,如果我将字符串划分为n个值,则输出应该是具有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 个答案:

答案 0 :(得分:1)

首先,我们可以将字符串分成数组字。我们称之为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));

答案 1 :(得分:0)

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

希望这可以解决您的问题。

答案 2 :(得分:0)

这将满足您的需求。

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

答案 3 :(得分:0)

也许您会喜欢;

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