Devolviendo Arrays y ChildNodes

Tengo el siguiente código:

var actionsAllowed = $(packet).find('actionsAllowed').get(); var actionArray = $(actionsAllowed).each(function () { var actionNodes = this.childNodes; var actionNumber = actionNodes.length; var array = new Array(actionNumber) for (var i = 0; i < actionNodes.length; i++) { var action = actionNodes[i].nodeName array[i] = action console.log(action); } return array; }); 

Esto busca el paquete (XML) para "actionsAllowed" y lo devuelve como "[actionsAllowed]" .

Luego estoy tratando de crear una matriz con cada una de las acciones enumeradas en la matriz.

"actionsAllowed" "this" convierte en "actionsAllowed" sin el "[ ]" y eso le permite devolver los nodos secundarios en la forma “NodeList [ActionOne, ActionTwo, ActionThree]”. Luego obtengo la longitud de NodeList y creo una matriz de esa longitud.

Luego itero sobre el NodeList y los agrego a la matriz.

Al final, devuelve la matriz como "[ActionOne, ActionTwo, ActionThree]" , ¡lo cual es genial!

PERO – este es el problema:

La variable "actionArray" convierte en "Object[actionsAllowed]" , en lugar de la matriz.

¿Alguna idea de por qué esto es por favor? Tengo una teoría pero no puedo arreglarlo = (

¡Gracias!

$(actionsAllowed).each devuelve el primer elemento de la iteración. Pareces querer esto:

 var actionArray = []; $(actionsAllowed).each(function () { var actionNodes = this.childNodes; var actionNumber = actionNodes.length; var array = new Array(actionNumber) for (var i = 0; i < actionNodes.length; i++) { var action = actionNodes[i].nodeName array[i] = action console.log(action); } actionArray.push(array); }); 

EDITAR: Si lo que desea es una gran matriz en lugar de una matriz de matrices, cámbiela a

 var actionArray = []; $(actionsAllowed).each(function () { var actionNodes = this.childNodes; for (var i = 0; i < actionNodes.length; i++) { var action = actionNodes[i].nodeName actionArray.push(action); console.log(action); } }); 

Aquí hay otra alternativa:

 var actionArray = $('actionsAllowed > *').map(function (el) { return el.nodeName; }).get();