lavezzi1
@lavezzi1

Как предыдущее значение объекта складывать с текущим?

Здравствуйте. Есть путь типа: const path = 'dir1/dir2/dir3/dir4/'; из него нужно получить массив объектов:
const arr = [
  { key: 'dir1', path: 'dir1/' },
  { key: 'dir2', path: 'dir1/dir2/' },
  { key: 'dir3', path: 'dir1/dir2/dir3/' },
  { key: 'dir4', path: 'dir1/dir2/dir3/dir4/' },
]


Как это можно реализовать?

Моя попытка https://jsfiddle.net/1dh5db4d/30/
  • Вопрос задан
  • 121 просмотр
Решения вопроса 3
alvvi
@alvvi
export default apathy;
const path = 'dir1/dir2/dir3/dir4/';
const result = 
  path
     .split('/')
     .slice(0,-1)
     .map((key, i, self) => ({key, path: self.slice(0, i+1).join('/') + '/'});
Ответ написан
Комментировать
@lmilligan
Я бы сделал так, но возможно есть более оптимальное решение
const path = 'dir1/dir2/dir3/dir4/'
let arr = []
path.slice(0,-1).split('/').forEach((item,l,items) => {
	let obj = {key: item, path: ''}
	for(let i = 0; i <= l; i++) {
		obj.path += items[i] + '/'
	}
	arr.push(obj)
})

console.log(arr)
Ответ написан
Комментировать
drugoi
@drugoi
Front-end Developer
const path = 'dir1/dir2/dir3/dir4/';
const pathArray = path
  .replace(/\/$/g, '')
  .split('/')
  .map((dir, index, paths) => {
    return {
      key: dir,
      path:
        paths.slice(0, index).join('/') +
        `${index !== 0 ? '/' : ''}${dir}/`
    };
  });
console.log(pathArray);


Момент с проверкой индекса мне не особо нравится, но в голову другое не пришло.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
EreminD
@EreminD
Кое-что умею
const paths = path.split("/")
    paths.forEach(function (item) {
      if(item) arr.push(
        {key: item, path: path.substring(0, path.indexOf(item)) + item})
    })
Ответ написан
Комментировать
demon416nds
@demon416nds
Разработчик на чем попало
зачем столько констант и лишних движений?
const path = 'dir1/dir2/dir3/dir4/';
const arrOfPath = path.split('/');
crumbs=[];
for(var i=0;i<arrOfPath.length-1;i++)
{crumbs[i]='';
for(var j=0;j<=i;j++)
{crumbs[i]=crumbs[i]+arrOfPath[j];}}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы