values recorrer property objetos objeto eliminar elemento crear array agregar javascript javascript-objects

recorrer - ¿Cómo obtener todos los valores de propiedades de un objeto Javascript(sin conocer las claves)?



object.values typescript (20)

Compatible con ES7, incluso algunos navegadores aún no lo admiten

Dado que, Object.values(<object>) se integrará en ES7 y

Hasta que se esperen todos los navegadores para admitirlo, podría incluirlo dentro de una función:

Object.vals=(o)=>(Object.values)?Object.values(o):Object.keys(o).map((k)=>o[k])

Entonces :

Object.vals({lastname:''T'',firstname:''A''}) // [''T'',''A'']

Una vez que los navegadores sean compatibles con ES7, no tendrá que cambiar nada en su código.

Si hay un objeto Javascript:

var objects={...};

Supongamos que tiene más de 50 propiedades, sin conocer los nombres de las propiedades (es decir, sin conocer las ''claves'') ¿cómo obtener el valor de cada propiedad en un bucle?


Ahora uso Dojo Toolkit porque los navegadores antiguos no admiten Object.values .

require([''dojox/lang/functional/object''], function(Object) { var obj = { key1: ''1'', key2: ''2'', key3: ''3'' }; var values = Object.values(obj); console.log(values); });

Salida:

[''1'', ''2'', ''3'']


Aparentemente, como aprendí recientemente, esta es la forma más rápida de hacerlo:

var objs = {...}; var objKeys = Object.keys(obj); for (var i = 0, objLen = objKeys.length; i < objLen; i++) { // do whatever in here var obj = objs[objKeys[i]]; }


Aquí hay una función reutilizable para obtener los valores en una matriz. También tiene en cuenta los prototipos.

Object.values = function (obj) { var vals = []; for( var key in obj ) { if ( obj.hasOwnProperty(key) ) { vals.push(obj[key]); } } return vals; }


Aquí hay una función similar a los valores de matriz de PHP ()

function array_values(input) { var output = [], key = ''''; for ( key in input ) { output[output.length] = input[key]; } return output; }

Aquí le mostramos cómo obtener los valores del objeto si está utilizando ES6 o superior:

Array.from(values(obj));


Dependiendo de qué navegadores tenga que admitir, esto se puede hacer de varias maneras. La gran mayoría de los navegadores en el Object.keys salvaje son compatibles con ECMAScript 5 (ES5), pero tenga en cuenta que muchos de los ejemplos a continuación utilizan Object.keys , que no está disponible en IE <9. Consulte la tabla de compatibilidad .

ECMAScript 3+

Si tiene que admitir versiones anteriores de IE, esta es la opción para usted:

for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var val = obj[key]; // use val } }

El anidado if se asegura de no enumerar las propiedades en la cadena de prototipos del objeto (que es el comportamiento que casi seguramente desea). Debes usar

Object.prototype.hasOwnProperty.call(obj, key) // ok

más bien que

obj.hasOwnProperty(key) // bad

porque ECMAScript 5+ le permite crear objetos sin prototipos con Object.create(null) , y estos objetos no tendrán el método hasOwnProperty . El código travieso también puede producir objetos que anulan el método hasOwnProperty .

ECMAScript 5+

Puede utilizar estos métodos en cualquier navegador que admita ECMAScript 5 y superior. Estos obtienen valores de un objeto y evitan enumerar sobre la cadena de prototipo. Donde obj es tu objeto:

var keys = Object.keys(obj); for (var i = 0; i < keys.length; i++) { var val = obj[keys[i]]; // use val }

Si quieres algo un poco más compacto o quieres tener cuidado con las funciones de los bucles, Array.prototype.forEach es tu amigo:

Object.keys(obj).forEach(function (key) { var val = obj[key]; // use val });

El siguiente método crea una matriz que contiene los valores de un objeto. Esto es conveniente para hacer un bucle.

var vals = Object.keys(obj).map(function (key) { return obj[key]; }); // use vals array

Si desea que aquellos que usan Object.keys seguros contra null (como for-in ), entonces puede hacer Object.keys(obj || {})...

Object.keys devuelve propiedades enumerables . Para iterar sobre objetos simples, esto suele ser suficiente. Si tiene algo con propiedades no enumerables con las que necesita trabajar, puede usar Object.getOwnPropertyNames en lugar de Object.keys .

ECMAScript 2015+ (AKA ES6)

Las matrices son más fáciles de iterar con ECMAScript 2015. Puede usar esto para su ventaja cuando trabaje con valores uno por uno en un bucle:

for (const key of Object.keys(obj)) { const val = obj[key]; // use val }

Usando las funciones de flecha fat de ECMAScript 2015, la asignación del objeto a una matriz de valores se convierte en una sola línea:

const vals = Object.keys(obj).map(key => obj[key]); // use vals array

ECMAScript 2015 presenta Symbol , cuyas instancias se pueden usar como nombres de propiedades. Para obtener una lista de los símbolos de un objeto, use Object.getOwnPropertySymbols (esta función es la razón por la que Symbol no se puede usar para hacer propiedades privadas). La nueva API de Reflect de ECMAScript 2015 proporciona Reflect.ownKeys , que devuelve una lista de nombres de propiedades (incluidos los no enumerables) y símbolos.

Comprensiones de matrices (no intente utilizarlas)

Las comprensiones de matrices se eliminaron de ECMAScript 6 antes de su publicación. Antes de su eliminación, una solución habría parecido:

const vals = [for (key of Object.keys(obj)) obj[key]]; // use vals array

ECMAScript 2017+

ECMAScript 2016 agrega características que no afectan este tema. La especificación ECMAScript 2017 agrega Object.values y Object.entries . Ambos devuelven matrices (lo que sorprenderá a algunos, dada la analogía con Array.entries ). Object.values se puede utilizar como está o con un bucle for-of .

const values = Object.values(obj); // use values array or: for (const val of Object.values(obj)) { // use val }

Si desea utilizar tanto la clave como el valor, entonces Object.entries es para usted. Produce una matriz rellena con [key, value] pares. Puede usar esto como está, o (observe también la asignación de desestructuración ECMAScript 2015) en un bucle for-of :

for (const [key, val] of Object.entries(obj)) { // use key and val }

Object.values shim

Finalmente, como se señala en los comentarios y por otra respuesta, puede valer la pena usar uno de estos como un calzo. No se preocupe, lo siguiente no cambia el prototipo, solo agrega un método a Object (que es mucho menos peligroso). Usando las funciones de la flecha grasa, esto también se puede hacer en una línea:

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

que ahora puedes usar como

// [''one'', ''two'', ''three''] var values = Object.values({ a: ''one'', b: ''two'', c: ''three'' });

Si desea evitar el cambio de valor cuando existe un Object.values nativo, puede hacer:

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

Finalmente...

Tenga en cuenta los navegadores / versiones que necesita para admitir. Los anteriores son correctos donde se implementan los métodos o características del lenguaje. Por ejemplo, el soporte para ECMAScript 2015 se desactivó de forma predeterminada en V8 hasta hace poco, lo que impulsó a los navegadores como Chrome. Las características de ECMAScript 2015 deben evitarse hasta que los navegadores que intenta admitir implementen las características que necesita. Si usa babel para compilar su código en ECMAScript 5, entonces tiene acceso a todas las características en esta respuesta.



ES5 Object.keys

var a = { a: 1, b: 2, c: 3 }; Object.keys(a).map(function(key){ return a[key] }); // result: [1,2,3]


Me doy cuenta de que llego un poco tarde, pero aquí hay un problema para el nuevo método de Object.values 47

Object.prototype.values = Object.prototype.values || function(obj) { return this.keys(obj).map(function(key){ return obj[key]; }); };


Object.entries lo hacen de mejor manera.

var dataObject = {"a":{"title":"shop"}, "b":{"title":"home"}} Object.entries(dataObject).map(itemArray => { console.log("key=", itemArray[0], "value=", itemArray[1]) })


Para aquellas personas que se adaptan tempranamente en la era de CofeeScript, aquí hay otro equivalente para ello.

val for key,val of objects

Lo que puede ser mejor que esto, porque los objects se pueden reducir para que se vuelvan a escribir y se reduzca la legibilidad.

objects[key] for key of objects


Puedes recorrer las teclas en bucle:

foo = {one:1, two:2, three:3}; for (key in foo){ console.log("foo["+ key +"]="+ foo[key]); }

saldrá:

foo[one]=1 foo[two]=2 foo[three]=3


Si realmente desea una matriz de valores, me parece más limpio que construir una matriz con un ciclo for ... in.

ECMA 5.1+

function values(o) { return Object.keys(o).map(function(k){return o[k]}) }

Vale la pena señalar que, en la mayoría de los casos, realmente no necesita una serie de valores, será más rápido hacer esto:

for(var k in o) something(o[k]);

Esto se repite sobre las teclas del objeto o. En cada iteración k se establece en una clave de o.


Si tiene acceso a Underscore.js, puede usar la función _.values la _.values manera:

_.values({one : 1, two : 2, three : 3}); // return [1, 2, 3]


Usando un simple for..in loop:

for(var key in objects) { var value = objects[key]; }


Uso: Object.values() , pasamos un objeto como argumento y recibimos una matriz de los valores como valor de retorno.

Esto devuelve una matriz de un objeto dado con valores de propiedad enumerables. Obtendrá los mismos valores que utilizando el bucle for in pero sin las propiedades en el Prototipo. Este ejemplo probablemente aclare las cosas:

function person (name) { this.name = name; } person.prototype.age = 5; let dude = new person(''dude''); for(let prop in dude) { console.log(dude[prop]); // for in still shows age because this is on the prototype } // we can use hasOwnProperty but this is not very elegant // ES6 + console.log(Object.values(dude)); // very concise and we don''t show props on prototype


en uso ECMAScript5

keys = Object.keys(object);

De lo contrario, si su navegador no lo admite, use el conocido for..in loop

for (key in object) { // your code here }


utilizar

console.log(variable)

y si usa google chrome, abra la consola con Ctrl + Shift + j

Goto >> Consola


utilizar un relleno de polietileno como:

if(!Object.values){Object.values=obj=>Object.keys(obj).map(key=>obj[key])}

entonces usa

Object.values(my_object)

3) beneficio!


var objects={...}; this.getAllvalues = function () { var vls = []; for (var key in objects) { vls.push(objects[key]); } return vls; }