【问题标题】:Split string at nth occurance of delimiter into array in javascript在javascript中将第n次出现分隔符的字符串拆分为数组
【发布时间】:2015-09-12 01:18:27
【问题描述】:

是否有 javascript/jquery 方法或函数可以让我在第 n 次出现选定分隔符时拆分字符串?我希望它像常规的 str.split(delimiter) 一样工作,但不是在每次出现分隔符时进行拆分,而是可以指示每次跳过 n 个分隔符。

var str = "A,BB,C,DDD,EEEE,F";
var strAry = str.split(",");

会导致 strAry 看起来像 {"A","BB","C","DDD","EEEE","F"}

假设我将第 n 次出现设置为 2,我想要的是 {"A,BB","C,DDD","EEEE,F"}。

我写了一个看起来可以工作的小函数,但希望有一个更简单的方法来做到这一点:

function splitn(fullString, delimiter, n){
    var fullArray = fullString.split(delimiter);
    var newArray = [];
    var elementStr = "";
    for(var i = 0; i < fullArray.length; i++) {
        if (i == fullArray.length-1) {
            if (elementStr.length == 0) {
                elementStr = fullArray[i];
            } else {
                elementStr += (delimiter + fullArray[i]);
            }
            newArray.push(elementStr);
        } else {
            if (((i + 1) % n) == 0) {
                if (elementStr.length == 0) {
                    elementStr = fullArray[i];
                } else {
                    elementStr += (delimiter + fullArray[i]);
                }
                newArray.push(elementStr);
                elementStr = "";
            } else {
                if (elementStr.length == 0) {
                    elementStr = fullArray[i];
                } else {
                    elementStr += (delimiter + fullArray[i]);
                }
            }
        }
    };
    return newArray;
};

谢谢。

【问题讨论】:

  • 您可以使用常规拆分,然后重新加入对

标签: javascript jquery arrays string split


【解决方案1】:

您可以简单地使用Array.prototype.reduce() 来根据自己的喜好修改 split 返回的数组。这个想法与您的代码相似,只是更短。

function modify(str, n, delim) {
    return str.split(delim).reduce(function(output, item, i) {
        if (!(i % n)) {
            output.push(item);
        } else {
            output[i / n | 0] += delim + item;
        };
        return output;
    }, []);
};

modify("A,BB,C,DDD,EEEE,F", 3, ','); //["A,BB,C", "DDD,EEEE,F"]
modify("A,BB,C,DDD,EEEE,F", 2, ','); //["A,BB", "C,DDD", "EEEE,F"]

【讨论】:

  • 哦,不错,reduce 方法对我来说是一个新方法。谢谢。
【解决方案2】:

编辑: 刚刚注意到您想使用任意“nth”值。我对其进行了更新,因此您可以简单地将 nth 更改为您喜欢的任何正整数。


这是一种利用 .indexOf() 的第二个参数的方法,这样您就可以在字符串的最后一个结束点之后锚定您的搜索:

function splitn(fullString, delimiter, n) {
    var lastIdx = 0
    ,   idx = -1
    ,   nth = 0
    ,   result = [];

    while ((idx = fullString.indexOf(delimiter, idx + delimiter.length)) !== -1) {
      if ((nth = ++nth % n) === 0) {
        result.push(fullString.slice(lastIdx, idx));
        lastIdx = idx + 1;
      }
    }
    result.push(fullString.slice(lastIdx));
    return result;
}

var result = splitn("A,BB,C,DDD,EEEE,F", ",", 2);


document.body.innerHTML = "<pre>" + JSON.stringify(result, null, 4) + "</pre>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2021-08-10
    • 2013-03-11
    • 2013-11-15
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多