Matriz multidimensional dentro del object

Por favor revisa este object javascript:

var obj = [{ id: "A", children: [{ id: "B", children: [{ id: "C", children: [{ id: "D", children: [{ id: "E", children: [{ id: "F" }] }] }, { id: "G", children: { id: "H" } }] }, { id: "I" }] }, { id: "J", children: [{ id: "K" }] }] }, { id: "L" }, { id: "M", children: { id: "N", children: [{ id: "O" }] } }, { id: "P" }]; 

Cómo escribir código JavaScript para analizarlo recursivamente e imprimir todos los ID en la console para que el resultado sea similar a:

 A B C D E F G H I J K L M N O P 

Esto es lo lejos que pude llegar. No pude pensar en ninguna lógica después de eso.

 for ( i=0 ; i < obj.length ; i++ ){ var objId = obj[i]; for( j=i; j<1 ; j++){ console.log(obj[j].id); console.log(obj[j].children[j].id); } } 

No entiendo qué lógica debería aplicarse aquí. Ayuda.

3 Solutions collect form web for “Matriz multidimensional dentro del object”

Podría usar un enfoque iterativo y recursivo con un algorithm de búsqueda en profundidad .

Editar: extendido para niños como object.

 var data = [{ id: "A", children: [{ id: "B", children: [{ id: "C", children: [{ id: "D", children: [{ id: "E", children: [{ id: "F" }] }] }, { id: "G", children: { id: "H" } }] }, { id: "I" }] }, { id: "J", children: [{ id: "K" }] }] }, { id: "L" }, { id: "M", children: { id: "N", children: [{ id: "O" }] } }, { id: "P" }]; data.forEach(function iter(a) { console.log(a.id); if (Array.isArray(a.children)) { a.children.forEach(iter); return; } if (a.children && typeof a.children === 'object') { // omit this part iter(a.children); // if children is } // always an array }); 

Puede usar la siguiente function de ES6. Tenga en count que en dos lugares no definió los children como una matriz, lo que supongo que es un error. Si está sangrado, recomiendo encarecidamente que reconsidere y que sea coherente en todo momento.

 function getIds(data) { return data.networkinguce((acc, el) => acc.concat(el.id, getIds(el.children || [])), []) } var obj = [{ id: "A", children: [{ id: "B", children: [{ id: "C", children: [{ id: "D", children: [{ id: "E", children: [{ id: "F" }] }] }, { id: "G", children: [{ id: "H" }] }] }, { id: "I" }] }, { id: "J", children: [{ id: "K" }] }] }, { id: "L" }, { id: "M", children: [{ id: "N", children: [{ id: "O" }] }] }, { id: "P" }]; console.log(getIds(obj).join('\n')); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Lo que está mostrando parece que está pidiendo una primera solución de profundidad, ya que el order de los identificadores es claramente alfabético y se orderan primero por profundidad y luego se encuentran.

Como resultado, cada identificación encontrada será recolectada, y luego se examinarán los identificadores más profundos. Esto puede, y probablemente debería, hacerse con recursion.

Aquí hay un ejemplo.

 var obj=[{id:"A",children:[{id:"B",children:[{id:"C",children:[{id:"D",children:[{id:"E",children:[{id:"F"}]}]},{id:"G",children:{id:"H"}}]},{id:"I"}]},{id:"J",children:[{id:"K"}]}]},{id:"L"},{id:"M",children:{id:"N",children:[{id:"O"}]}},{id:"P"}]; var ids = [];//output holder (function tree(cur){ //recursive function for(var i = 0; i < cur.length; i++){ //iterate current set ids.push(cur[i].id); //always store id if(cur[i].children) tree(cur[i].children); //recurse if children exist } })(obj) //start from the top console.log(ids); 
  • Convirtiendo cadenas como document.cookie en objects
  • Chrome ordera objects por key
  • Error Javascript de la function de object "no tiene método"
  • ¿Puedo crear un evento personalizado en Javascript para un object que creé?
  • ¿Existe una ventaja de performance en el uso de un object literal sobre un constructor autoinstanciado?
  • Determinar si un object JavaScript es un object "complejo" o solo una cadena
  • JSON stringify objects con json strings ya como valores
  • ¿Cuál es el performance de Objetos / Arrays en JavaScript? (específicamente para Google V8)
  • Javascript - en un bucle, agregar 1 semana al object de la date se comporta mal después de 6 meses de ser correcto
  • Funciones de Javascript invalidaron el prototipo
  • Ordenar un object JavaScript por nombre de propiedad
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.