Si j'ai un objet comme:
{ 'a' : 'Apple', 'b' : 'banana', 'c' : 'carrot' }
Si je ne sais pas à l'avance que la liste monte en "c", mis à part la lecture en boucle de l'objet, existe-t-il un moyen d'obtenir le dernier élément de l'objet (par exemple, 'carrot'
)?
Non, l'ordre n'est pas garanti dans JSON ni dans la plupart des autres structures de données clé-valeur. Le dernier élément peut donc parfois être carrot
et à d'autres moments banana
et ainsi de suite. Si vous avez besoin de compter sur la commande, votre meilleur choix est d’utiliser des tableaux. La puissance des structures de données clé-valeur réside dans l'accès aux valeurs par leur keys
, et non dans l'obtention de l'élément nth
de l'objet.
Oui, il existe un moyen d'utiliser Object.keys(obj)
. C'est expliqué dans cette page :
var fruitObject = { 'a' : 'Apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Si vous voulez obtenir la valeur du dernier objet, vous pouvez faire ceci:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
last = Object.keys(obj)[Object.keys(obj).length-1];
où obj est ton objet
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
Solution utilisant la syntaxe d'attribution de déstructuration de ES6:
var temp = { 'a' : 'Apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
En ce qui concerne la commande des propriétés des objets en Javascript, je vais simplement vous relier à cette réponse:
L'ordre des éléments dans une boucle "pour (… dans ...)"
Plus précisément:
Toutes les implémentations modernes de ECMAScript itérer dans l'objet propriétés dans l'ordre dans lequel ils ont été définis
Donc, toutes les autres réponses sont correctes, il n'y a pas d'ordre garanti officiel pour objecter des propriétés. Cependant, dans la pratique, il y en a (à l'exception des bugs qui peuvent naturellement gâcher le comportement incrusté même officiellement spécifié).
De plus, l'ordre d'énumération de facto des propriétés de l'objet sera probablement codifié dans les futures spécifications EMCAScript.
Cependant, pour le moment, je n’écrirais pas de code à ce sujet, principalement parce qu’il n’existait pas d’outil intégré permettant de gérer l’ordre des propriétés des objets. Vous pourriez écrire la vôtre, mais au final, vous feriez toujours une boucle sur chaque propriété d'un objet pour déterminer sa position.
En tant que telle, la réponse à votre question est Non, il n’ya pas d’autre moyen que de parcourir en boucle un objet.
Utilisez un tableau et non un objet littéral, si l'ordre est important.
list = ['Apple', 'banana', 'carrot'];
Ou quelque chose comme
dict = {
'a' : ['Apple', 'awesome'],
'b' : ['best friend']
};
Ou même..
dict = [{letter:'a', list:['Apple', 'awesome']},{letter:'b', list:['best friend']}];
Les clés pour dict
ne sont pas du tout garanties d'être en ordre.
JSArray = { 'a' : 'Apple', 'b' : 'banana', 'c' : 'carrot' };
document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c'
document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot'
Vous pouvez également utiliser la méthode Object.values()
:
Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
Soit obj
votre objet. Exec:
(_ => _[Object.keys(_).pop()])( obj )
Objet de la carte en JavaScript . Cela fait déjà environ 3 ans. Cette structure de données de carte conserve l'ordre dans lequel les éléments sont insérés. Avec cette récupération du dernier élément, le dernier élément inséré dans la carte