【问题标题】:How to convert a string into an array with jagged arrays如何将字符串转换为具有锯齿状数组的数组
【发布时间】:2019-07-15 07:14:20
【问题描述】:

我正在编写一个函数,它接收如下格式的字符串:

"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]);
    }
}

【问题讨论】:

  • 您的输出数组语法无效,在数组中的字符串之外有 :; 不正确 - 这些应该在字符串内吗?
  • 如果我们假设它们应该在字符串中,那么结果数组就不会是锯齿状的。 (更准确地说:外部数组中的数组都具有相同的长度。)请提供您要查找的结果的语法正确示例。
  • 当输入字符串中没有空格时,为什么你的代码会在空格上分割?
  • 不确定您要达到的目标,因为我不明白在这种情况下它是“锯齿状”的原因。我想这就是你正在寻找的东西 => jsfiddle.net/1mo5p6ed

标签: javascript arrays jagged-arrays


【解决方案1】:
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]]);
}

【讨论】:

    【解决方案2】:

    目前,您的尝试并没有做太多的事情来实现您想要的结果,因为您正在用空格 .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);

    【讨论】:

      【解决方案3】:

      要通过:; 拆分字符串,您只需在.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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 2013-09-17
        • 2018-11-05
        • 2019-08-19
        • 1970-01-01
        相关资源
        最近更新 更多