字符串中每个双字或三字的Javascript函数

时间:2016-04-28 09:44:32

标签: javascript jquery

这里我有一些javascript为字符串中的每个单独的单词运行一个函数:

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

但是我怎么做类似的事情来为字符串中的每对单词运行函数?像这样:

  • 这是
  • 是一些
  • 一些文字

甚至是三个字:

  • 这是一些
  • 是一些文字

5 个答案:

答案 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参数的值来更改模式长度。

Fiddle

答案 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);