Tengo un objeto JavaScript como
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
¿Cómo puedo obtener la longitud y la lista de claves en este objeto?
Tengo un objeto JavaScript como
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
¿Cómo puedo obtener la longitud y la lista de claves en este objeto?
Respuestas:
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
};
var keys = [];
for (var k in obj) keys.push(k);
alert("total " + keys.length + " keys: " + keys);
keys.
Object.prototype, lo que no debería hacer de todos modos. Para los constructores personalizados, sin embargo, tienes razón.
[](o en array()aquel entonces) lo convierte en una matriz, que luego puede usar como una matriz de forma segura.
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
Es compatible con la mayoría de los principales navegadores ahora.
for(key in ob)! Object.keysNo enumera las claves de los prototipos, pero lo .. in objhace.
Underscore.js hace que la transformación sea bastante limpia:
var keys = _.map(x, function(v, k) { return k; });
Editar: Extrañé que tú también puedas hacer esto:
var keys = _.keys(x);
Si solo desea las claves que son específicas de ese objeto en particular y no las prototypepropiedades derivadas :
function getKeys(obj) {
var r = []
for (var k in obj) {
if (!obj.hasOwnProperty(k))
continue
r.push(k)
}
return r
}
p.ej:
var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays
var keys = new Array();
for(var key in obj)
{
keys[keys.length] = key;
}
var keyLength = keys.length;
para acceder a cualquier valor del objeto, puede usar obj [clave];
keys.length, lo cual es diferente para cada iteración ya que cada iteración inserta un valor.
La respuesta de Anurags es básicamente correcta. Pero para admitir también Object.keys(obj)en navegadores antiguos, puede usar el siguiente código que se copia de
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
. Agrega el Object.keys(obj)método si no está disponible desde el navegador.
if (!Object.keys) {
Object.keys = (function() {
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function(obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}
Solución recursiva para navegadores que admiten ECMAScript 5:
var getObjectKeys = function(obj) {
var keys = Object.keys(obj);
var length = keys.length;
if (length !== 0) {
for (var i = 0; i < length; i++) {
if (typeof obj[keys[i]] === 'object') {
keys[keys[i]] = getObjectKeys(obj[keys[i]]);
}
}
}
return keys;
};
Uso Object.keys()... es el camino a seguir.
La documentación completa está disponible en el sitio MDN vinculado a continuación:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Si decides usar Underscore.js, será mejor que lo hagas
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = [];
_.each( obj, function( val, key ) {
keys.push(key);
});
console.log(keys.lenth, keys);
En JavaScript, un objeto es una entidad independiente, con propiedades y tipo.
Para obtener valores del objeto en forma de matriz: Object .values (obj) // obj es el nombre del objeto que utilizó Resultado -> ["value1", "value2", "value3", "value4"]
Para obtener claves del objeto en forma de matriz: Object .keys (obj) // obj es el nombre del objeto que utilizó Resultado -> ["clave1", "clave2", "clave3", "clave4"]
Como ambas funciones devuelven una matriz, puede obtener la longitud de las claves o el valor utilizando la propiedad de longitud. Por ejemplo: Object .values (obj) .length u Object .keys (obj) .length
Para una cadena delimitada por comas que enumera las claves de un objeto JSON, intente lo siguiente:
function listKeys(jObj){
var keyString = '';
for(var k in jObj){
keyString+=(','+k);
}
return keyString.slice(1);
}
/* listKeys({'a' : 'foo', 'b' : 'foo', 'c' : 'foo'}) -> 'a,b,c' */
Usando ES6, puedes usar forEach para iterar sobre las claves de un objeto. Para obtener todas las claves que puede usar, Object.keysque devuelve todas las claves en un objeto
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
Sería breve el fragmento anterior, que solo toma un parámetro
Object.keys(obj).forEach(function(keyValue) {
console.log(keyValue);
});
if(props.userType){
var data = []
Object.keys(props.userType).map(i=>{
data.push(props.userType[i])
})
setService(data)
}
usando el método de cortar, aplicar y unir.
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());