J'ai une table de hachage JavaScript, comme:
function compareThings(thing1, thing2) { var name1 = thing1["name"].toLowerCase(); var name2 = thing2["name"].toLowerCase(); if (name1 < name2) { return -1; } if (name1 > name2) { return 1; } return 0; } things.sort(compareThings);
5 Réponses :
Vos paramètres sont En outre, je pense que ce que vous recherchez est un tableau associatif, qui n'est pas instancié avec la syntaxe http://www.quirksmode.org/js/associative.html p>
Edit: em> Je ne pense pas qu'il y a un tableau en JavaScript, qui vous laissera faire ce que vous voulez. P>
Vous pouvez avoir un vieux tableau simple, qui vous permettra de faire le tri personnalisé ou em> Vous pouvez avoir un tableau associatif, ce qui vous permettra de disposer des valeurs nommées. P>
Avec la matrice régulière, vous pouvez évidemment itération à travers les index. P>
Avec la matrice associative, vous pouvez parcourir les noms en faisant Thing1 code> et
Thing2 code>, mais vous référenciez quelques variables appelées
asp1 code> et
asp2 code>, Ce qui, autant que je puisse dire de la source que vous avez fournie, n'existez pas. P>
[] code>. Voir ici pour plus d'informations: P>
pour (var-key in myarray) code> p>
Soyez prudent avec ça pour ... en syntaxe. Ça va boucler sur tous i> les propriétés L'objet en question a, ce qui inclut des objets autres que des clés de réseau.
^^ C'est vrai, mais ne devrait pas être un problème aussi longtemps qu'il n'hérite rien.
Si vous voulez itérer via une table de hachage en JavaScript dans l'ordre, faites-la, remplissez-la avec les touches de hachage, puis triez-la.
<html> <body> <pre> <script> var things = new Object (); things["hello"] = {"name" : "zzz I fell asleep", "number" : 7}; things["one"] = {"name" : "something", "number" : 18}; things["two"] = {"name" : "another thing", "number" : -2}; var keys = []; for (var key in things) { if (things.hasOwnProperty(key)) { keys.push(key); } } keys.sort (); for (i in keys) { var key = keys[i]; var value = things[key]; document.write (key +"="+value+"\n"); } </script> </pre> </body> </html>
Juste une note, l'ordre d'itération du pour ... dans code>
déclaration peut être arbitraire, rien ne décrit dans le Spécification ECMAScript sur l'ordre d'énumération des propriétés, il est de la mise en œuvre dépendante ... Pas de garanties, utilisez avec soin ...
@CMS: Je devrais donc utiliser pour (var i = 0; i
@Kinopiko, exactement, examine les articles suivants pour plus d'informations: [1] ( andrewdupont.net/2006/05/18/... ) et [2] ( dhtmlkitchen.com/?category=/javascript/&date=2007/10/21/... ) .
Vous pouvez également construire votre (code> tableau code> à l'aide de objet.keys (Choses) code>. C'est aussi une bonne pratique pour stocker la longueur de la matrice avant l'étape de comparaison de la boucle, de sorte que @ CMS's pour la boucle de ci-dessus pourrait être écrite comme
pour (var i = 0, L. Longueur; i
Keys.Length code> pour une valeur qui ne change pas.
Ma solution
things.sort(function(a,b){return a.name - b.name;});
Op utilise le tableau choses code> de manière incorrecte pour que cela ne vous aide pas.
J'ai développé une fonction qui trie une table de hachage par la clé, peu importe si la valeur est un nombre ou une chaîne. Il conserve la clé si la table est une table associée.
var things = new Object (); things["hello"] = {"name" : "zzz I fell asleep", "number" : 7}; things["one"] = {"name" : "something", "number" : 18}; things["two"] = {"name" : "another thing", "number" : -2}; things = sortHashTableByKey(things, 'name'); /* [ two: { name: 'another thing', number: -2 }, one: { name: 'something', number: 18 }, hello: { name: 'zzz I fell asleep', number: 7 } ] */
@Hayksaakian, comment est la fonction qui va venir? En tant qu'être humain, j'admire vraiment l'effort de quiconque pour soutenir l'état et fonctionner au-delà de l'esprit / problème corporel. Bravo.
J'aurais dû dire "faire cela" pas "étant ceci" @toddmorison
Même chose que EeeaHul, avec clés () et chaîne (). localecompare ():
Vous n'avez pas d'objet Hâble (objet AKA) ni un tableau approprié. Si vous avez un objet pour avoir un objet, vous devez l'initialiser avec
{} code> pas avec
[] code>. Si vous initialisez avec
[] code>, vous avez un tableau, mais ne l'ajoutez pas à l'aide de
A ["one"] code> et
A ["Deux" ] code> mais par
a.push (...); code>. Seulement après que vous sachiez quelle structure de données vous voulez, pouvez-vous vous soucier du tri. (BTW:
foo ["bar"] code> est identique que
foo.bar code>, utilisez la seconde, il ne bouge pas le code avec des littéraux de chaîne et de nombreux crochets)