J'ai un objet JavaScript comme
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
Comment obtenir la longueur et la liste des clés de cet objet?
J'ai un objet JavaScript comme
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
Comment obtenir la longueur et la liste des clés de cet objet?
Réponses:
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, ce que vous ne devriez pas faire de toute façon. Pour les constructeurs personnalisés, cependant, vous avez raison.
[](ou array()à l'époque) en fait un tableau, que vous pouvez ensuite utiliser en tant que tableau en toute sécurité.
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
Il est désormais pris en charge sur la plupart des principaux navigateurs.
for(key in ob)! Object.keysne listera pas les clés des prototypes, mais le .. in objfait.
Underscore.js rend la transformation assez propre:
var keys = _.map(x, function(v, k) { return k; });
Edit: j'ai manqué que vous puissiez faire cela aussi:
var keys = _.keys(x);
Si vous souhaitez uniquement les clés spécifiques à cet objet particulier et non les prototypepropriétés dérivées :
function getKeys(obj) {
var r = []
for (var k in obj) {
if (!obj.hasOwnProperty(k))
continue
r.push(k)
}
return r
}
par exemple:
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;
pour accéder à n'importe quelle valeur de l'objet, vous pouvez utiliser obj [clé];
keys.length, ce qui est différent pour chaque itération à mesure que chaque itération insère une valeur.
La réponse d'Anurags est fondamentalement correcte. Mais pour prendre Object.keys(obj)en charge les anciens navigateurs, vous pouvez également utiliser le code ci-dessous qui est copié à partir de
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
. Il ajoute la Object.keys(obj)méthode si elle n'est pas disponible depuis le navigateur.
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;
};
}());
}
Solution récursive pour les navigateurs prenant en charge 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;
};
Utilisez Object.keys()... c'est la voie à suivre.
La documentation complète est disponible sur le site MDN lié ci-dessous:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Si vous décidez d'utiliser Underscore.js, vous feriez mieux de le faire
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 objet est une entité autonome, avec des propriétés et un type.
Pour récupérer des valeurs depuis Object sous forme de tableau: Object .values (obj) // obj est le nom d'objet que vous avez utilisé Résultat -> ["valeur1", "valeur2", "valeur3", "valeur4"]
Pour récupérer les clés de l'objet sous forme de tableau: Object .keys (obj) // obj est le nom de l'objet que vous avez utilisé Résultat -> ["key1", "key2", "key3", "key4"]
Comme les deux fonctions renvoient un tableau, vous pouvez obtenir la longueur des clés ou la valeur en utilisant la propriété length. Par exemple - Object .values (obj) .length ou Object .keys (obj) .length
Pour une chaîne délimitée par des virgules répertoriant les clés d'un objet JSON, essayez ce qui suit:
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' */
À l'aide d'ES6, vous pouvez utiliser forEachpour parcourir les clés d'un objet. Pour obtenir toutes les clés, vous pouvez utiliser Object.keysqui renvoie toutes les clés d'un objet
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
La main courte de l'extrait ci-dessus serait, qui ne prend qu'un seul paramètre
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)
}
en utilisant la méthode slice, apply et join.
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());