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

Как можно улучшить код, который заменяет подстроки "(, 0, )" на "], [" в строке, содержащей массив, чтобы в итоге корректно преобразовать эту строку в массив с помощью JSON.parse()?
  • 5 мая 2024 г. 15:00
Ответы на вопрос 3
1. Для разделения одномерного массива на строки двумерного массива можно использовать метод `chunk` из библиотеки lodash. Например:
```javascript
const _ = require('lodash');
const array = [1, 2, 3, 4, 5, 6];
const chunkedArray = _.chunk(array, 2);
console.log(chunkedArray);
```
Этот код разделит одномерный массив `array` на строки по 2 элемента и создаст двумерный массив.

2. Для улучшения кода, который заменяет подстроки "(, 0, )" на "], [" в строке содержащей массив, можно воспользоваться регулярным выражением и методом `replace`. Например:
```javascript
const str = "(, 0, 1, 2, 0, 3, )";
const replacedStr = str.replace(/\([0-9, ]+\)/g, match => `[${match.substring(2, match.length - 2)}]`);
console.log(replacedStr); // "[0, 1, 2], [0, 3]"
const array = JSON.parse("[" + replacedStr + "]");
console.log(array); // [[0, 1, 2], [0, 3]]
```
Этот код заменит все подстроки "(, 0, )" на "], [" и затем корректно преобразует строку в массив с помощью JSON.parse().
Ваш регулярное выражение \(\,\s*0\s*\,\s*\) использует круглые скобки, которых нет в исходной строке, это приводит к тому, что замены не происходит. 
Ваша исходная строка представляет собой массив в квадратных скобках [] , а не в круглых () , и вместо пробела с запятой, ,, Вам необходимо заменить , 0, на ], [.
Также, чтобы удалить последний , 0, вы можете сначала выполнить отдельную замену для этого случая.

Вот исправленный код:
const str = "[3, 2, 1, 0, 5, 6, 4, 0, 1, 5, 3, 0, 2, 2, 2, 0]";

// Заменяем все вхождения ', 0,' на '], [' 
let replacedStr = str.replace(/, 0,/g, "], [");

// Удаляем последнее вхождение ', 0' (в конце строки перед закрытием скобки)
replacedStr = replacedStr.replace(/, 0\]/, "]");

// Для безопасной работы с JSON.parse обрамляем весь массив в дополнительные скобки
replacedStr = "[" + replacedStr + "]";

console.log(replacedStr); // Выводит строку в нужном формате

// Преобразуем строку в JSON
const jsonArray = JSON.parse(replacedStr);

console.log(jsonArray); // Выводит массив массивов

Выполнив этот код, вы получите желаемый результат в виде массива массивов:
[[3, 2, 1], [5, 6, 4], [1, 5, 3], [2, 2, 2]]
const inString = "[3, 2, 1, 0, 5, 6, 4, 0, 1, 5, 3, 0, 2, 2, 2, 0]";
let data = JSON.parse(inString);
let outData = [];
let outDataElem = [];
for (let i in data){
  let el = data[i];
  if(!el){ // Если 0
    if(outDataElem.length){ // Если outDataElem уже что-то содержит
      outData.push([...outDataElem]);
    };
    outDataElem = [];
    continue;
  };
  outDataElem.push(el);
};
if(outDataElem.length){
  outData.push([...outDataElem]);
};
console.log(outData);
Похожие вопросы