在出现问题之前,我想像
一样动态生成
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中尝试所有逻辑时,我也没有工作。
请帮帮我。
答案 0 :(得分:2)
您可以使用映射部分字符串的双切片。
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;
答案 1 :(得分:1)
您可以使用slice
方法来获得更简单的解决方案。
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;