#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);
чтобы уменьшить количество сравнений.