這裏我有一些JavaScript運行函數中的字符串的每個單獨的字:JavaScript函數在字符串中的每個兩倍或三倍的話
var input = 'this is some text';
var words = input.split(' ');
$.each(words,function(i){
//Do something
});
但我怎麼會做類似的運行對每個功能的東西字符串中的一對單詞?就像這樣:
- 這是
- 一些
- 一些文字
甚至三倍的話:
- 這是一些
- 是一些文本
這裏我有一些JavaScript運行函數中的字符串的每個單獨的字:JavaScript函數在字符串中的每個兩倍或三倍的話
var input = 'this is some text';
var words = input.split(' ');
$.each(words,function(i){
//Do something
});
但我怎麼會做類似的運行對每個功能的東西字符串中的一對單詞?就像這樣:
甚至三倍的話:
使用常見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
}
編輯:添加大於或等於,以便最後一組單詞也包括在內。
好的答案 - 不要使用正則表達式,因爲我會覆蓋大量的文本: ) –
i <= words.length更好,因爲它包含最後一組單詞 –
雖然問題 - 你有words.slice(i,i + PACKET_SIZE),它返回「this,is,some」.....我得到數據包=「這是一些」? –
只需使用一個for循環與2或3的增量:
for(var i = 0; i < words.length; i += 2) {
//Do something with words[i]
}
你可以做,
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
參數的值更改圖案長度。
以下代碼是使用split
功能給你字的陣列,然後應用map
將它轉變成一個數組的數組,的Ñ每個大小。 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);
如果你不想的話的羣體小於ñ,那些在單詞的末尾,你需要更多的代碼:
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);
只是對一項提案e循環。
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>');
還是有回調降低
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>');
@ Nina Scholz你如何做到這一點:) – ozil
你的意思各執一個逗號? 'words = input.split(',');' –
@PaulFitzgerald在空格上沒有分隔,我用的逗號只是表示分隔 –