Как преобразовать строку в массив с неровными массивами - PullRequest
0 голосов
/ 21 февраля 2019

Я пишу функцию, которая получает строку, подобную следующему формату:

"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 голосов
/ 21 февраля 2019

В данный момент ваша попытка не дает больших результатов для достижения желаемого результата, так как вы разделяете на пробел .split(" "), но в вашей строке нет пробелов, и, таким образом, это не дает большого результата.

Вместо этого вы можете использовать регулярное выражение , чтобы разделить текущую строку.Используя регулярное выражение, вы можете более точно контролировать, как разбивается ваша строка.Ниже я использовал:

/(\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);
0 голосов
/ 21 февраля 2019

Чтобы разделить строку на : или ;, вы можете просто использовать регулярное выражение для получения желаемого результата в методе .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/

0 голосов
/ 21 февраля 2019
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]]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...