Разделить строку и вернуть массив из объектов со значениями JS

Нужна помощь в написании функции, которая принимает строку и разбивает ее на массив элементов по "/", удаляя пустые элементы.

Должен вернуться массив из объектов типа {id, token}.

Например, из строки:

http://google.com/hello/world

получить:

[ {"id":0,"token":"http:"}, {"id":1,"token":"google.com"}, {"id":2,"token":"hello"}, {"id":3,"token":"world"} ]

Подскажите как правильно?

Вот что пока у меня получается:

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Vasily

Для того что бы это реализовать можно воспользоваться следующими методами:

split(), что бы разделить строку по символу /;

forEach(), что бы перебрать получившийся массив.

И задать условие, которое будет пропускать строки если они пустые.

const string = "http://google.com/hello/world/"

let result = []

string.split("/").forEach((token, id) => {
  if (token !== "") {
    result.push({id, token})
  }
})

console.log(result)

→ Ссылка
Автор решения: Grundy

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

Метод split может принимать в качестве аргумента регулярное выражение, это позволит обойтись без лишнего вызова filter.

В итоге код может быть следующим:

const task = (str) => {
  return str.split(/[/]+/).map((rec, index) => ({
    "id": index,
    "token": rec
  }))
}
console.log(task('http://google.com/hello/world'))

Если могут приходить адреса оканчивающиеся на /, то проще воспользоваться методом match и получить все подстроки, не включающие /

Например:

const task = (str) => {
  return str.match(/([^/]+)/g).map((rec, index) => ({
    "id": index,
    "token": rec
  }))
}
console.log(task('http://google.com/hello/world/'))

→ Ссылка