如何将字符串转换为带有锯齿状数组的数组

时间:2019-02-21 11:25:33

标签: javascript arrays jagged-arrays

我正在编写一个函数,该函数接收类似于以下格式的字符串:

"Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill"

我想将其推入数组,然后将每个键值转换为锯齿状数组,如下所示:

[["Fred":]["Corwill";]["Alfred:"]["Corwill"]]

我尝试通过split()创建一个初始数组,第二个 并推动字符串的每个部分,但都没用,我该如何实现 锯齿状阵列分裂?

这是我的代码:

function meeting(s) {
    var initialArray = s.split(' ');
    var jaggedArray = [];
    for(var i = 0; i < initialArray.length; i++) {
     jaggedArray.push(initialArray[i]);
    }
}

3 个答案:

答案 0 :(得分:0)

function splitMulti(str, tokens){
    var tempChar = tokens[0]; // We can use the first token as a temporary join character
    for(var i = 1; i < tokens.length; i++){
        str = str.split(tokens[i]).join(tempChar);
    }
    str = str.split(tempChar);
    return str;
}

var temp_result = splitMulti(yourString, [':', ';']) // or you can use regex
var final_result = [];
for (var i=0; i<temp_result.length; i++) {
  result.push([temp_result[i]]);
}

答案 1 :(得分:0)

此刻,由于用空格.split(" ")进行拆分,因此您在尝试获得所需结果方面做得并不多,但是您的字符串没有空格,因此根本无法实现任何目的。

相反,您可以使用regular expression拆分当前字符串。通过使用正则表达式,您可以更精确地控制如何拆分字符串。下面,我用过:

/(\w+[:;])/

在这里,我用字字符(连续)(\w+)分割字符串,后跟分号(;)或冒号(:)。

但是,这将返回一维数组,其中包含其他""(空)字符串。因此,我还使用了.reduce来删除空字符串并将每个拆分值放入其自己的数组中,从而为您提供结果。

请参见下面的工作示例:

const str = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill",

res = str.split(/(\w+[:;])/).reduce((acc, wrd) => wrd ? [...acc, [wrd]] : acc, []);
console.log(res);

答案 2 :(得分:0)

要用:;分割字符串,您可以简单地使用正则表达式通过.split()方法获得所需的结果。

const names = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill"

const separatedNames = names.split(/:|;/) 

console.log(separatedNames) // => ["Fred", "Corwill", ...] 

查看示例:https://jsfiddle.net/1mo5p6ed/

相关问题