que - metodos en javascript
Obtención de lista de claves de objetos JavaScript (14)
La respuesta de Anurags es básicamente correcta. Pero para admitir Object.keys(obj)
en navegadores más antiguos, también puede usar el siguiente código que se copia desde developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Agrega el Object.keys(obj)
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;
};
}());
}
Tengo un objeto de 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?
Para una cadena delineada por comas que lista 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'' */
Si solo desea las claves que son específicas de ese objeto en particular y no las propiedades de prototype
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
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;
};
Tenga en cuenta que en coffeescript esto se puede lograr en todos los navegadores y nodos como
k for k of obj
y por lo tanto
(1 for _ of obj).length
Underscore.js hace que la transformación sea bastante limpia:
var keys = _.map(x, function(v, k) { return k; });
Edit: me perdí que puedes hacer esto también:
var keys = _.keys(x);
Usando ES6, puede usar forEach
para iterar sobre las claves de un objeto. Para obtener todas las claves, puede utilizar Object.keys
que devuelve todas las claves en un Objeto
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
La mano corta del fragmento anterior sería, que solo toma un parámetro
Object.keys(obj).forEach(function(keyValue) {
console.log(keyValue);
});
Usando el método de rebanar, aplicar y unir.
var print = Array.prototype.slice.apply( obj );
alert(''length=''+print.length+'' list''+print.join());
Use Object.keys()
... es el camino a seguir.
La documentación completa está disponible en el sitio de MDN enlazado a continuación:
var obj = {
key1: ''value1'',
key2: ''value2'',
key3: ''value3'',
key4: ''value4''
}
var keys = Object.keys(obj);
console.log(''obj contains '' + keys.length + '' keys: ''+ keys);
Es supported con la mayoría de los principales navegadores ahora.
obj = {''a'':''c'',''b'':''d''}
Puedes probar:
[index for (index in obj)]
esto volverá
[''a'',''b'']
para obtener la lista de claves o
[obj[index] for (index in obj)]
para obtener los valores
var keys = [];
for(var k in obj) keys.push(k);
alert("total " + keys.length + " keys: " + keys);
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];
var obj = {
key1: ''value1'',
key2: ''value2'',
key3: ''value3'',
key4: ''value4''
}
console.log(Object.keys(obj));
console.log(Object.keys(obj).length)