这里我有一些javascript为字符串中的每个单独的单词运行一个函数:
var input = 'this is some text';
var words = input.split(' ');
$.each(words,function(i){
//Do something
});
但是我怎么做类似的事情来为字符串中的每对单词运行函数?像这样:
甚至是三个字:
答案 0 :(得分:1)
使用常见的for
循环,而不是使用foreach
循环
var words = "this is some text".split(' ');
// take the words 2 by 2
for (var i = 0; i < words.length - 1; ++i) {
var currentWord = words[i],
nextWord = words[i + 1];
// do something
}
// take the words 3 by 3
for (var i = 1; i < words.length - 1; ++i) {
var previousWord = words[i - 1],
currentWord = words[i],
nextWord = words[i + 1];
// do something
}
您也可以处理一般情况。
var PACKET_SIZE = 2;
var words = "this is some text".split(' ');
for (var i = 0; i <= words.length - PACKET_SIZE; ++i) {
var packet = words.slice(i, i + PACKET_SIZE);
// do something
}
编辑:添加大于或等于,以便还包括最后一组单词。
答案 1 :(得分:1)
只是一个循环的提案。
function getN(array, n) {
var result = [];
array.forEach(function (a, i, aa) {
i + n <= aa.length && result.push(aa.slice(i, i + n).join(' '));
});
return result;
}
var input = 'this is some text',
array = input.split(' ');
document.write('<pre>' + JSON.stringify(getN(array, 2), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(getN(array, 3), 0, 4) + '</pre>');
或者使用reduce
的回调
function getN(n) {
return function (r, a, i, aa) {
i + n <= aa.length && r.push(aa.slice(i, i + n).join(' '));
return r;
};
}
var input = 'this is some text',
array = input.split(' ');
document.write('<pre>' + JSON.stringify(array.reduce(getN(1), []), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(array.reduce(getN(2), []), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(array.reduce(getN(3), []), 0, 4) + '</pre>');
答案 2 :(得分:0)
只需使用增量为2或3的for循环:
for( var i = 0; i < words.length; i += 2 ) {
//Do something with words[i]
}
答案 3 :(得分:0)
你可以,
var input = 'this is some text';
var words = input.split(' ');
var length = 2;
var str;
$.each(words, function(j) {
str = "";
for (i = 0; i < length && (j + i) < words.length; i++) {
str += " " + words[j + i];
}
$("#container").append("<div>" + str + "</div>");
});
您可以通过更改length
参数的值来更改模式长度。
答案 4 :(得分:0)
以下代码使用split
函数为您提供单词数组,然后应用map
将其转换为数组数组,每个数组的大小为 n 。 join
函数用于将这些数组再次转换为空格分隔的字符串。
var s="this is some text made of several words";
var n=2;
var result = s.split(' ').map(function(val,index,arr) {
return arr.slice(index,index+n).join(' ');
});
alert(result);
如果您不希望单词组小于 n (单词末尾的单词组),则需要更多代码:
var s = "this is some text made of several words";
var n = 3;
var arr = s.split(' ');
var result = arr.slice(0, arr.length - n + 1)
.map(function(val, index) {
return arr.slice(index, index + n).join(' ');
});
alert(result);