Каким образом можно произвести преобразование строки?

Как преобразовать строку '1 1-4 1,4,6 12 7 20' в массив массивов, где каждый подмассив содержит числа в соответствии с определенными правилами: если числа представлены диапазоном, то он записывается, если числа просто перечислены через запятую, они также записываются в подмассив? Так, чтобы на выходе из '1 1-4 1,4,6 12 7 20' получилось [[1], [1,2,3,4], [1,4,6], [12], [7], [20]].
```js
const testData = '1 1-4 1,4,6 12 7 20';
const modifiedtestData = testData.split(' ')

console.log(modifiedtestData.map((item, index) => {
  if (item.includes('-')) {
    const splittedArr = item.split('')
    const newArr = []
    for (i = +splittedArr[0]; i <= splittedArr[splittedArr.length - 1]; i++) {
      newArr.push(i.toString())
    }
    return newArr
  } else if (item.includes(',')) {
    return item.split(',')
  } 
    else return [item]
}));
```
  • 16 апреля 2024 г. 9:30
Ответы на вопрос 1
Приведенный вами код почти правильно работает, однако есть ошибка в строке, где происходит разбиение чисел на диапазон. Замените `const splittedArr = item.split('')` на `const splittedArr = item.split('-')`, чтобы правильно разделить числа в диапазоне. 

Также внутри цикла замените `splitter` на `splittedArr`, чтобы корректно использовать разделенные числа. 

Поправленный код будет выглядеть следующим образом: 

```js
const testData = '1 1-4 1,4,6 12 7 20';
const modifiedtestData = testData.split(' ')

console.log(modifiedtestData.map((item, index) => {
  if (item.includes('-')) {
    const splittedArr = item.split('-')
    const newArr = []
    for (i = +splittedArr[0]; i <= +splittedArr[1]; i++) {
      newArr.push(i.toString())
    }
    return newArr
  } else if (item.includes(',')) {
    return item.split(',')
  } 
    else return [item]
}));
``` 

После внесения этих изменений, вы получите желаемый результат: `[[ '1' ], [ '1', '2', '3', '4' ], [ '1', '4', '6' ], [ '12' ], [ '7' ], [ '20' ]]`
Похожие вопросы