Преобразование строки с числовыми массивами в фактическое значение

#javascript #arrays #json #string

#javascript #массивы #json #строка

Вопрос:

Я работаю над назначением кодирования, и часть его требует ввода текста от пользователя, который был бы отформатирован аналогично этому:

 value = "[1, 2, 3, 4]n[9, 8, 7, 6]n[1, 2, 3, 4]";  

Использование .split приводит к тому, что значение:

 value = ["[1, 2, 3, 4]", "[9, 8, 7, 6]", "[1, 2, 3, 4]"];  

Как мне преобразовать эти строки в массив обратно в фактические массивы?

Ответ №1:

Используйте map и JSON.parse для разделения строки:

 var value = "[1, 2, 3, 4]n[9, 8, 7, 6]n[1, 2, 3, 4]";
value = value.split("n");
var arrays = value.map(a => JSON.parse(a));
console.log(arrays);  

Ответ №2:

Замените n s запятыми и окружите входные данные [ и ] , чтобы у вас был JSON, представляющий один массив, который содержит 3 подмассива:

 const value = "[1, 2, 3, 4]n[9, 8, 7, 6]n[1, 2, 3, 4]";
const json = '['   value.replace(/n/g, ',')   ']';
const arr = JSON.parse(json);
console.log(arr);  

Ответ №3:

Вы находитесь на расстоянии одной пары квадратных скобок от создания вашего value анализируемого JSON.

 try {
    let array = JSON.parse('[' value ']');
} catch(e) {}
  

Try / catch хорош в случае, если вы не можете быть уверены, что входные данные будут в точном формате, который вы ожидаете.

Ответ №4:

Как только у вас будет следующий код:

 value = ["[1, 2, 3, 4]", "[9, 8, 7, 6]", "[1, 2, 3, 4]"];  

Вы можете сделать что-то вроде этого, чтобы получить фактические массивы:

 value.map(e => e.slice(1, -1).split(',').map(Number))  

Это должно вернуть массив всех ваших массивов.