从字符串生成块

时间:2017-10-25 07:14:25

标签: javascript arrays

  

在出现问题之前,我想像

一样动态生成      

temp = word[i] for 2,

     

temp = word[i-1] + word [i] for 3,

     

temp = word[i-2] + word[i-1] + word [i] for 4

我用代码和我尝试的内容解释了

function produceTwoChArray(word) {
      var temp = "";
      var tempArr = [];

      for (var i = 0; i < word.length; i++) {
        temp += word[i];
        if (temp.length === 2) {
          tempArr.push(temp);
        }
        temp = word[i];
      }
      return tempArr;
    }
    produceTwoChArray("breaking")

上面的代码将生成结果为:

 ["br", "re", "ea", "ak", "ki", "in", "ng"]

所以在 for 循环内如果我改为下面的代码来生成三个字母,那么

    if (temp.length === 3) {
        tempArr.push(temp);
    }
    temp =  word[i-1] + word[i];

结果:

["bre", "rea", "eak", "aki", "kin", "ing"]

所以添加单词[i-1],单词[i-2]的临时长度为3,4等等。

为了动态创建临时语句,我创建了这些函数

1)

function generateWordSequence(n) {
  var n = n - 2;
  var temp1 = [];
  for (var j = n; j >= 0; j--) {
    temp1.push("word[i - " + j + "]");
  }
  temp1 = temp1.join('+').toString();
  return temp1;
}

2)

function generateWordSequence(n, word) {
  var n = n - 2;
  var temp1 = "";
  for (var j = n; j >= 0; j--) {
    temp1 = temp1 + word[i - j];
  }
  return temp1;
}

但是上面的两个尝试都以字符串形式返回,所以它没有用。当我在yieldTwoChArray fn中调用fn以上

function produceTwoChArray(word, n) {
  var temp = "";
  var tempArr = [];
  var retVar = generateWordSequence(n, word);

  for (var i = 0; i < word.length; i++) {
    temp += word[i];
    if (temp.length === n) {
      tempArr.push(temp);
    }

    temp = retVar;

  }
  return tempArr;
}

当我在produceTwochArray中尝试所有逻辑时,我也没有工作。

请帮帮我。

2 个答案:

答案 0 :(得分:2)

您可以使用映射部分字符串的双切片。

&#13;
&#13;
function part(string, count) {
    return [...string.slice(count - 1)].map((_, i) => string.slice(i, i + count));
}

console.log(part("breaking", 2));
console.log(part("breaking", 3));
console.log(part("breaking", 4));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用slice方法来获得更简单的解决方案。

&#13;
&#13;
function produceArray(str,n){
   return str=str.split('').map(function(item,i,str){
      return str.slice(i,i+n).join('');
   }).filter(a => a.length == n);
}
console.log(produceArray("breaking",2));
console.log(produceArray("breaking",3));
console.log(produceArray("breaking",4));
console.log(produceArray("breaking",5));
console.log(produceArray("breaking",6));
&#13;
&#13;
&#13;