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); 
  • Clasificar matriz de objects por key individual con valor de date
  • aplicar funciones a objects en javascript
  • ¿Puedo crear mi propio object de matriz en JavaScript?
  • this.method = function () {} VS obj.prototype.method = function () {}
  • Múltiples arguments vs. object de opciones
  • Accediendo a esto desde dentro de la function en línea de un object
  • Anular el comportamiento pnetworkingeterminado de los operadores de comparación en JavaScript
  • Javascript - Función de almacenamiento en el object - ¿mala práctica?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.