Цитата из описания награды:
В текущих ответах недостаточно подробностей.
Я думаю, вы не понимаетекак это работает в текущих ответах.Поэтому я предоставлю вам два решения: одно альтернативное решение и одно расширенное решение с функцией Array.reduce()
.
Альтернативное решение с for
петли
Пояснения к коду смотрите в комментариях к коду.
var arr = ['/social/swipes/women', '/social/swipes/men', '/upgrade/premium'],
result = {};
//if you want to have it shorter you can write for(var i = arr.length; i--;) too
for(var i = 0; i < arr.length; i++)
{
var parts = arr[i].slice(1).split('/'),
//if we have already one object then we take it. If not the we create new one:
curObj = result[parts[0]] = result[parts[0]] || {};
for(var k = 1; k < parts.length; k++)
{
//if we have next part
if(parts[k+1])
//if we have already one object then we take it. If not the we create new one:
curObj[parts[k]] = curObj[parts[k]] || {};
//if we do not have next part
else curObj[parts[k]] = null;
//or if-else block in one line:
//curObj[parts[k]] = parts[k+1] ? (curObj[parts[k]] || {}) : null;
//link to next object:
curObj = curObj[parts[k]];
}
}
console.log(JSON.stringify(result, null, 4));
Но если вы этого не поняли, тогда посмотрите этот код:
var arr = ['/social/swipes/women', '/social/swipes/men', '/upgrade/premium'],
result = {},
parts = arr[2].slice(1).split('/'),
curObj = result[parts[0]] = {};
curObj[parts[1]] = parts[1+1] ? {} : null;
console.log(JSON.stringify(result, null, 4));
Расширенное решение с Array.reduce()
В этом решении я использую код от пользователя Nitish Narang в расширенной версии с некоторыми пояснениями в комментариях и выводе на консоль - чтобы вы могли видеть в консоли, что делает код.Моя рекомендация: если вы не понимаете код со стрелочными функциями, напишите его полностью обычными функциями и соответствующими именами переменных, которые сами себя объясняют.Нам (людям) нужны картинки, чтобы представить все.Если у нас есть только несколько коротких имен переменных, тогда сложно представить и понять все это.Я также немного «замкнул» его код.
var arr = ['/social/swipes/women', '/social/swipes/men', '/upgrade/premium'];
var result = arr.reduce(function(acc0, curVal, curIdx)
{
console.log('\n' + curIdx + ': ------------\n'
+ JSON.stringify(acc0, null, 4));
var keys = curVal.slice(1).split('/');
keys.reduce(function(acc1, currentValue, currentIndex)
{
acc1[currentValue] = keys[currentIndex+1]
? acc1[currentValue] || {}
: null;
return acc1[currentValue]
}, acc0); //acc0 - initialValue is the same object, but it is empty only in first cycle
return acc0
}, {}); // {} - initialValue is empty object
console.log('\n------result------\n'
+ JSON.stringify(result, null, 4));