Eu tenho um objeto JavaScript como
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
Como posso obter o comprimento e a lista de chaves neste objeto?
Eu tenho um objeto JavaScript como
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
Como posso obter o comprimento e a lista de chaves neste objeto?
Respostas:
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, o que você não deveria fazer de qualquer maneira. Para construtores personalizados, no entanto, você está certo.
[]a ele (ou array()então) torna um array, que você pode usar como um array com segurança.
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
É suportado na maioria dos principais navegadores agora.
for(key in ob)! Object.keysnão listará as chaves dos protótipos, mas .. in objsim.
O Underscore.js torna a transformação bastante limpa:
var keys = _.map(x, function(v, k) { return k; });
Edit: Eu perdi que você também pode fazer isso:
var keys = _.keys(x);
Se você deseja apenas as chaves específicas para esse objeto específico e não quaisquer prototypepropriedades derivadas :
function getKeys(obj) {
var r = []
for (var k in obj) {
if (!obj.hasOwnProperty(k))
continue
r.push(k)
}
return r
}
por exemplo:
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 acessar qualquer valor do objeto, você pode usar obj [key];
keys.length, o que é diferente para cada iteração, pois cada iteração insere um valor.
A resposta de Anurags está basicamente correta. Mas também para oferecer suporte a Object.keys(obj)navegadores mais antigos, você pode usar o código abaixo copiado de
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
. Ele adiciona o Object.keys(obj)método se não estiver disponível no 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;
};
}());
}
Solução recursiva para navegadores que suportam 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;
};
Use Object.keys()... é o caminho a percorrer.
A documentação completa está disponível no site MDN, abaixo:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Se você decidir usar o Underscore.js, é melhor fazer
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);
Em JavaScript, um objeto é uma entidade independente, com propriedades e tipo.
Para buscar valores de Object na forma de matriz: Object .values (obj) // obj é o nome do objeto que você usou Resultado -> ["value1", "value2", "value3", "value4"]
Para buscar chaves de Object na forma de matriz: Object .keys (obj) // obj é o nome do objeto que você usou Resultado -> ["key1", "key2", "key3", "key4"]
Como ambas as funções estão retornando matriz, você pode obter o comprimento das chaves ou do valor usando a propriedade length. Por exemplo - Object .values (obj) .length ou Object .keys (obj) .length
Usando o ES6, você pode usar forEachpara iterar sobre as Chaves de um Objeto. Para obter todas as chaves, você pode usar o Object.keysque retorna todas as chaves em um Objeto
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
Seria a mão curta do snippet acima, que requer apenas um 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 fatia, aplique e junte o método.
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());