JavaScript-функция для разделения строки и возврата комбинации в массив

1

Я пытаюсь написать функцию JavaScript, чтобы разбить строку на свой разделитель ('/') и захотеть вернуть свою комбинацию путей в массив.

Входные данные:

"Global/Европа/Великобритания/Лондон"

Желаемый результат:

[ "Global", "Global/Europe", "Global/Europe/UK"]

Я попробовал рекурсивную функцию ниже, но по какой-то причине массив содержит только одно значение.

function splitPath(str) {
    var output = [];
    if (str.lastIndexOf('/') !== -1) {        
        str = str.split("/").slice(0, -1).join("/");
        output.push(str);
        splitPath(str);
    }
    //console.log(output);
    return output;
}

Пожалуйста, дайте мне знать, если есть какой-либо прямой способ достичь этого в JavaScript.

Благодарю.

Теги:
arrays
recursion

5 ответов

4
Лучший ответ

Использование массива # уменьшить

let input = "Global/Europe/UK/London";
let output = input.split("/").slice(0, -1).reduce((acc, item, index) => {
    acc.push(index ? acc[index - 1] + '/' + item : item);
    return acc;
}, []);

console.log(output);
3

Вы можете разбить строку и нанести карту части с самого начала, используя только части без последней.

var string = "Global/Europe/UK/London",
    grouped = string
        .split('/')
        .slice(0, -1)
        .map(function (_, i, a) {
            return a.slice(0, i + 1).join('/');
        });

console.log(grouped);
1
'Global/Europe/UK/London'
    .split('/')
    .map(
        (item, i, items) => {
            return items.slice(0, i+1).join('/');
        }
    )
1

Вот способ разделить, а затем итеративно добавить части:

    function splitPath(str) {
       const parts = str.split("/");
       let head = parts.shift();
       const result = [head];
       for (const part of parts) {
          head += "/" + part;
          result.push(head);
       }
    
      return result;
    }
    
    console.log(splitPath("Global/Europe/UK/London"))
1

Как насчет этого?

   let output = [];
    let input = str.split('/');
    input.reduce((acc,v, i, arr) => {  output.push(acc + "/"+ v ); return acc + "/"+ v; })

Ещё вопросы

Сообщество Overcoder
Наверх
Меню