Разделить строку и вернуть массив из объектов со значениями 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 шт):
Для того что бы это реализовать можно воспользоваться следующими методами:
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)
Если нужно получить массив, каждый элемент которого соответствует элементу другого массива, можно воспользоваться методом .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/'))
