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

Javascript function for each double or triple words in string

本文关键字:三字 函数 Javascript 字符串      更新时间:2023-09-26

在这里,我有一些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
}

编辑:添加大于或等于,以便还包括最后一组单词。

只是一个循环的提案。

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>');

只需使用增量为 2 或 3 的 for 循环:

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 将其转换为数组数组,每个数组的大小为 njoin函数用于将这些数组再次转换为空格分隔的字符串。

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