Как разделить строку во вложенный массив?

Я знаю, что могу использовать функцию split для преобразования строки в массив, но как можно разделить строку дважды для создания вложенного массива?

Я ожидал, что этого будет достаточно, но он не даст желаемого результата.

var myString = "A,B,C,D|1,2,3,4|w,x,y,z|"
var item = myString.split("|");
var array = [item.split(",")];

Было бы более оптимальным использовать для каждого цикла?

ОЖИДАЕМЫЙ ВЫХОД

var array = [
  ["A","B","C","D"],
  ["1","2","3","4"],
  ["w","x","y","z"],
];

Всего 2 ответа


Как только вы разделились на | , используйте .map для учета вложенности перед .split вызовом .split . Там также пустое место после последнего | , чтобы исключить это, сначала отфильтруйте по Boolean :

const myString = "A,B,C,D|1,2,3,4|w,x,y,z|";
const arr = myString
  .split('|')
  .filter(Boolean)
  .map(substr => substr.split(','));
console.log(arr);

Или вы можете использовать регулярное выражение для сопоставления чего угодно, кроме | :

const myString = "A,B,C,D|1,2,3,4|w,x,y,z|";
const arr = myString
  .match(/[^|]+/g)
  .map(substr => substr.split(','));
console.log(arr);


var myString = "A,B,C,D|1,2,3,4|w,x,y,z"
var item = myString.split("|");

var outputArr = item.map(elem => elem.split(","));
console.log(outputArr);


Есть идеи?

10000