Obtenir la prochaine paire clé-valeur dans un objet

Donné une clé, je veux trouver la propriété suivante dans un objet. Je ne peux pas compter sur les touches pour être commandé ou séquentielle (ils sont uuid). Veuillez voir ci-dessous pour un exemple trivial de ce que je veux:

var db = {
  a: 1,
  b: 2,
  c: 3
}

var next = function(db, key) {
  //???
}

next(db, 'a');  //I want 2
next(db, 'b');  //I want 3

Je veux aussi un prev() de la fonction, mais je suis sûr que ce sera la même solution.

Cela semble un problème trivial, mais je ne peux pas pour la vie de me comprendre comment le faire.

Heureux pour la solution à utiliser underscore.js ou être écrit en coffeescript 🙂

  • "Donc, compte tenu de "la clé", je veux regarder pour la première instance d'un objet." - Qu'entendez-vous la "première instance"? Vous ne pouvez pas avoir plus d'une propriété du même nom, donc il ne peut pas être une deuxième instance. "Je veux retourner la valeur de la propriété SUIVANTE." - Vous ne pouvez pas compter sur les propriétés de l'objet en cours dans un ordre particulier (même si certains - la plupart des? les navigateurs ont tendance à renvoyer les propriétés dans l'ordre de leur création). Si vous en avez besoin pour être commandé, vous devez utiliser un tableau.
  • c'est un bon point sur le navigateur de la propriété de la commande merci. Je pense que j'ai peut-être simplement besoin de tirer de cette info dans un tableau ordonné alors traverser QUE les.
  • je pense que ce n'est pas une bonne question. parce que l'ordre de la db objet key n'est pas cohérente. la racine de ce problème est la structure de données -db. si db ne peut pas être changé, il n'y a pas de réponse.
  • Même s'il est âgé d'un an, je suis en désaccord avec vous @island205. Cette question a été quelque chose que j'allais poser, même si j'ai eu un pressentiment qu'il ne pouvait pas être accompli. L'on a accepté la réponse m'a aussi donné un travail, même s'il complique le processus un peu, c'est une solution efficace.
InformationsquelleAutor captainclam | 2012-09-20