una tablas tabla recorrer objetos metodos lista dinamicas datos con buscar array agregar javascript jquery arrays object

tablas - recorrer array de objetos javascript



Convertir un objeto JS en una matriz usando jQuery (17)

¿Qué hay de jQuery.makeArray(obj)

Así es como lo hice en mi aplicación.

Mi aplicación crea un objeto JavaScript, como el siguiente:

myObj= {1:[Array-Data], 2:[Array-Data]}

Pero necesito este objeto como una matriz.

array[1]:[Array-Data] array[2]:[Array-Data]

Así que traté de convertir este objeto en una matriz mediante la iteración con $.each través del objeto y agregando el elemento a una matriz:

x=[] $.each(myObj, function(i,n) { x.push(n);});

¿Hay una mejor manera de convertir un objeto en una matriz o tal vez una función?


Creo que se puede usar for in pero se comprueba si la propiedad no está inerithed

myObj= {1:[Array-Data], 2:[Array-Data]} var arr =[]; for( var i in myObj ) { if (myObj.hasOwnProperty(i)){ arr.push(myObj[i]); } }

EDITAR: si lo desea, también puede mantener los índices de su objeto, pero debe verificar si son numéricos (y obtiene valores no definidos para los índices faltantes).

function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } myObj= {1:[1,2], 2:[3,4]} var arr =[]; for( var i in myObj ) { if (myObj.hasOwnProperty(i)){ if (isNumber(i)){ arr[i] = myObj[i]; }else{ arr.push(myObj[i]); } } }


Dado que ES5 Object.keys () devuelve una matriz que contiene las propiedades definidas directamente en un objeto (excluyendo las propiedades definidas en la cadena del prototipo):

Object.keys(yourObject).map(function(key){ return yourObject[key] });

ES6 lo lleva un paso más allá con las funciones de flecha:

Object.keys(yourObject).map(key => yourObject[key]);


Después de algunas pruebas, aquí hay un objeto general para convertir la función de matriz:

Tienes el objeto:

var obj = { some_key_1: "some_value_1" some_key_2: "some_value_2" };

La función:

function ObjectToArray(o) { var k = Object.getOwnPropertyNames(o); var v = Object.values(o); var c = function(l) { this.k = []; this.v = []; this.length = l; }; var r = new c(k.length); for (var i = 0; i < k.length; i++) { r.k[i] = k[i]; r.v[i] = v[i]; } return r; }

Función de uso:

var arr = ObjectToArray(obj);

Usted obtiene:

arr { key: [ "some_key_1", "some_key_2" ], value: [ "some_value_1", "some_value_2" ], length: 2 }

Entonces puedes alcanzar todas las claves y valores como:

for (var i = 0; i < arr.length; i++) { console.log(arr.key[i] + " = " + arr.value[i]); }

Resultado en consola:

some_key_1 = some_value_1 some_key_2 = some_value_2

Editar:

O en forma de prototipo:

Object.prototype.objectToArray = function() { if ( typeof this != ''object'' || typeof this.length != "undefined" ) { return false; } var k = Object.getOwnPropertyNames(this); var v = Object.values(this); var c = function(l) { this.k = []; this.v = []; this.length = l; }; var r = new c(k.length); for (var i = 0; i < k.length; i++) { r.k[i] = k[i]; r.v[i] = v[i]; } return r; };

Y luego usar como

console.log(obj.objectToArray);


El mejor método sería usar una función javascript -only:

var myArr = Array.prototype.slice.call(myObj, 0);


Hice una función personalizada:

Object.prototype.toArray=function(){ var arr=new Array(); for( var i in this ) { if (this.hasOwnProperty(i)){ arr.push(this[i]); } } return arr; };


Hoy en día, hay una forma simple de hacer esto: Object.values ​​() .

var myObj = { 1: [1, 2, 3], 2: [4, 5, 6] }; console.log(Object.values(myObj));

Salida:

[[1, 2, 3], [4, 5, 6]]

Esto no requiere jQuery, se ha definido en ECMAScript 2017.
Es compatible con todos los navegadores modernos (olvide IE).


La resolución es muy sencilla.

var my_obj = {1:[Array-Data], 2:[Array-Data]} Object.keys(my_obj).map(function(property_name){ return my_obj[property_name]; });


Puede crear una función simple para hacer la conversión de object a array , algo como esto puede hacer el trabajo por usted usando javascript puro:

var objectToArray = function(obj) { var arr = []; if (''object'' !== typeof obj || ''undefined'' === typeof obj || Array.isArray(obj)) { return obj; } else { Object.keys(obj).map(x=>arr.push(obj[x])); } return arr; };

o este:

var objectToArray = function(obj) { var arr =[]; for(let o in obj) { if (obj.hasOwnProperty(o)) { arr.push(obj[o]); } } return arr; };

y llamar y usar la función de la siguiente manera:

var obj = {1:''a'', 2:''b'', 3:''c'', 4:''d'', 5:''e''}; objectToArray(obj); // return ["a", "b", "c", "d", "e"]

También en el futuro tendremos algo llamado Object.values(obj) , similar a Object.keys(obj) que devolverá todas las propiedades para usted como una matriz, pero aún no es compatible con muchos navegadores ...


Si buscas un enfoque funcional:

var obj = {1: 11, 2: 22}; var arr = Object.keys(obj).map(function (key) { return obj[key]; });

Resultados en:

[11, 22]

Lo mismo con una función de flecha ES6:

Object.keys(obj).map(key => obj[key])

Con ES7 podrá usar Object.values en Object.values lugar ( más información ):

var arr = Object.values(obj);

O si ya está usando Underscore / Lo-Dash:

var arr = _.values(obj)


Si conoce el índice máximo en su objeto, puede hacer lo siguiente:

var myObj = { 1: [''c'', ''d''], 2: [''a'', ''b''] }, myArr; myObj.length = 3; //max index + 1 myArr = Array.prototype.slice.apply(myObj); console.log(myArr); //[undefined, [''c'', ''d''], [''a'', ''b'']]


Si desea mantener el nombre de las propiedades del objeto como valores. Ejemplo:

var fields = { Name: { type: ''string'', maxLength: 50 }, Age: { type: ''number'', minValue: 0 } }

Use Object.keys() , Array.map() y Object.assign() :

var columns = Object.keys( fields ).map( p => Object.assign( fields[p], {field:p} ) )

Resultado:

[ { field: ''Name'', type: ''string'', maxLength: 50 }, { field: ''Age'', type: ''number'', minValue: 0 } ]

Explicación:

Object.keys() enumera todas las propiedades de la fuente; .map() aplica la función => a cada propiedad y devuelve un Array; Object.assign() combina el nombre y el valor de cada propiedad.


Simplemente hacer

Object.values(obj);

¡Eso es todo!


Demostración de violín

Extensión para responder de .

var myObj = { 1: [1, [2], 3], 2: [4, 5, [6]] }, count = 0, i; //count the JavaScript object length supporting IE < 9 also for (i in myObj) { if (myObj.hasOwnProperty(i)) { count++; } } //count = Object.keys(myObj).length;// but not support IE < 9 myObj.length = count + 1; //max index + 1 myArr = Array.prototype.slice.apply(myObj); console.log(myArr); Referencia

Array.prototype.slice()

Function.prototype.apply()

Object.prototype.hasOwnProperty()

Object.keys()


ECMASCRIPT 5:

Object.keys(myObj).map(function(x) { return myObj[x]; })

ECMASCRIPT 2015 o ES6:

Object.keys(myObj).map(x => myObj[x])


var myObj = { 1: [1, 2, 3], 2: [4, 5, 6] }; var array = $.map(myObj, function(value, index) { return [value]; }); console.log(array);

Salida:

[[1, 2, 3], [4, 5, 6]]


x = []; for( var i in myObj ) { x[i] = myObj[i]; }