Лучший способ разделить строку и создать следующий массив: ‘1-2-3’ -> [‘1’, ‘1-2’, ‘1-2-3’]

#javascript

Вопрос:

строка выглядит примерно так:

 const string = '1-2-3-4-5-6-7-...-n';
 

и мне нужен такой массив, как этот:

 const arr = ['1', '1-2', '1-2-3', '1-2-3-4', '1-2-...-n'];
 

Я уже заходил в это до сих пор:

 const str = '1-2-3'; 
const arr = []; let actualValue = '';
const splitArray = str.split('-');
for (let i = 0; i < splitArray.length; i  ) {
  if (actualValue)         
    actualValue = actualValue   '-'   splitArray[i];     
  else 
    actualValue = splitArray[i];
  
  arr.push(actualValue); 
}
 

Комментарии:

1. Что именно не работает? Если я запущу это в скрипке, это даст желаемый результат, скрипка

2. Мне было интересно, есть ли лучший способ сделать это

3. Ваше решение самое простое — оно очень ясное и простое для понимания. Как новый программист — это самое лучшее, что я могу сделать. Олег предоставил другое решение в качестве ответа, но его сложнее понять, так как вам нужно будет знать, что делают все дополнительные функции (например reduce )

Ответ №1:

Может быть, это решение вас устроит?

 const result = "1-2-3-4-5-6-7-8-9".split("-").reduce((prev, curr) => {
  const last = prev.slice(-1);
  last.push(curr);
  prev.push(last.join("-"));
  return prev;
}, []);
console.log(result); 

Ответ №2:

Я предпочитаю

 const str = '1-2-3'; 
const arr = []; let actualValue = '';
const splitArray = str.split('-');
if (splitArray.length) {
  actualValue = splitArray[0];
  arr.push(actualValue);
}

for (let i = 1; i < splitArray.length; i  ) {
  actualValue = actualValue   '-'   splitArray[i];
  
  arr.push(actualValue); 
}

console.log(arr); 

чтобы уменьшить количество сравнений.