2016-04-28 43 views
0

這裏我有一些JavaScript運行函數中的字符串的每個單獨的字:JavaScript函數在字符串中的每個兩倍或三倍的話

var input = 'this is some text'; 
var words = input.split(' '); 
$.each(words,function(i){ 
    //Do something 
}); 

但我怎麼會做類似的運行對每個功能的東西字符串中的一對單詞?就像這樣:

  • 這是
  • 一些
  • 一些文字

甚至三倍的話:

  • 這是一些
  • 是一些文本
+0

你的意思各執一個逗號? 'words = input.split(',');' –

+0

@PaulFitzgerald在空格上沒有分隔,我用的逗號只是表示分隔 –

回答

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 
} 

編輯:添加大於或等於,以便最後一組單詞也包括在內。

+0

好的答案 - 不要使用正則表達式,因爲我會覆蓋大量的文本: ) –

+0

i <= words.length更好,因爲它包含最後一組單詞 –

+0

雖然問題 - 你有words.slice(i,i + PACKET_SIZE),它返回「this,is,some」.....我得到數據包=「這是一些」? –

0

只需使用一個for循環與2或3的增量:

for(var i = 0; i < words.length; i += 2) { 
    //Do something with words[i] 
} 
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參數的值更改圖案長度。

Fiddle

0

以下代碼是使用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);

1

只是對一項提案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>');

+1

@ Nina Scholz你如何做到這一點:) – ozil