There is a linear array:

var arr = [ {"name11":"item11", "name12":"item12"}, {"name21":"item21", "name22":"item22"}, {"name31":"item31", "name32":"item32"}, ] 

Tell me, please, how to convert it into a hierarchical one?

 var arr = [{ "name11":"item11", "name12":"item12", "name13":[{ "name21":"item21", "name22":"item22", "name23":[ {"name31":"item31", "name32":"item32"}, ] }] }] 
  • There is some kind of algorithm. according to which you need to convert? Is it always necessary to "unfold" the third one? - br3t
  • Yes, the third element always unfolds. - Lex
  • And do all arrays always contain only one object as a result? - vp_arth
  • To each element of the array (object), a new element is added to the end and all subsequent existing elements are nested in it. - Lex
  • one
    If you are given an exhaustive answer, mark it as correct (a daw opposite the selected answer). - Nicolas Chabanovsky

1 answer 1

Like this:

 let src = [ {"name11":"item11", "name12":"item12"}, {"name21":"item21", "name22":"item22"}, {"name31":"item31", "name32":"item32"}, ]; let cursor = src[0]; // сохраняем ссылку на текущий элемент // Проходим по всем объектам, кроме первого for (let i = 1; i < src.length; ++i) { // Генерируем ключ для нового элемента (name13) let key = 'name'+i+(Object.keys(cursor).length + 1); // Вставляем ссылку на объект завёрнутый в массив в нужное место cursor[key] = [src[i]]; // Удаляем на старом месте(в массиве образуется дырка) delete src[i]; // Обновляем курсор, чтобы работать со следующим уровнем cursor = cursor[key][0]; }; src.length = 1; // Обрезаем образовавшиеся дырки console.log(src);