JavaScript - преобразование строки в массив кортежей - PullRequest
0 голосов
/ 27 августа 2018

У меня есть строка, которую я хочу преобразовать в массив

"[(6, 11), (12, 17), (18, 20)]"

.split() не сработает (или, по крайней мере, я не знаю, как разделить слова), и JSON.parse всегда выдает Uncaught SyntaxError: Unexpected token

Я конвертирую вот так: JSON.parse(THAT_GIVEN_LIST)

Я что-то не так делаю? Как мне превратить эту строку в хороший список [(6, 11), (12, 17), (18, 20)]

Ответы [ 4 ]

0 голосов
/ 27 августа 2018

Вы могли бы сделать что-то, как я сделал ниже. В основном я удалил все пробелы из исходной строки, затем использовал регулярное выражение и split строку в массив. Наконец, я использовал другой оператор регулярного выражения и расширения для map отформатированных строк в новый массив:

var s = "[(6, 11), (12, 17), (18, 20)]";

function makeTuple(str) {
  return str
    .replace(/\s/g, "")
    .split("),(")
    .map(el => [...el.replace(/[\[()\]]/g, '').split(',')]);
}

console.log(makeTuple(s));
0 голосов
/ 27 августа 2018

Имея свой формат ввода в виде списка Python, вы можете сделать это следующим образом:

'use strict';

const tuple = "[(6, 11), (12, 17), (18, 20)]";

const tupleToArray = JSON.parse(tuple
  .replace(/\(/g, '[')
  .replace(/\)/g, ']')
);

console.log(tupleToArray);
0 голосов
/ 27 августа 2018

Использование JSON.parse() для получения двумерного массива. Замененные вхождения "(" с "[" и ")" с "]".

var arr = JSON.parse("[(6, 11), (12, 17), (18, 20)]".split("(").join("[").split(")").join("]"));

console.log(arr);
0 голосов
/ 27 августа 2018

Скобки, которые вы используете, не являются синтаксически правильными для JSON. Вы представляете, что они хотят определить кортеж. Однако кортежи не являются примитивами JSON. Если вы хотите иметь такие вложенные структуры, лучше всего использовать вложенные массивы:

const a = "[[6, 11], [12, 17], [18, 20]]";
const aa = JSON.parse(a);
console.log(aa);

aa.forEach(i => console.log(`first: ${i[0]}, second: ${i[1]}`));
...