Как я сортирую хеш-таблицу в JavaScript?

У меня есть хеш-таблица JavaScript, как так:

var things = [ ];
things["hello"] = {"name" : "zzz I fell asleep", "number" : 7};
things["one"] = {"name" : "something", "number" : 18};
things["two"] = {"name" : "another thing", "number" : -2};

Я хочу отсортировать их в порядок по имени, поэтому если я выполню итерации через хеш-таблицу, то это войдет в порядок

another thing
something
zzz I fell asleep

Я пытался делать это:

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);

Но это, кажется, не работает.

Править: мне приходит в голову, что, возможно, отсортированная хеш-таблица является оксюмороном. Если так, что лучший способ состоит в том, чтобы получить доступ к отсортированному списку вещей здесь?

12
задан Brian Tompsett - 汤莱恩 21 October 2016 в 20:02
поделиться

2 ответа

Если вы хотите перебирать хеш-таблицу в JavaScript по порядку создайте массив, заполните его хеш-ключами, а затем отсортируйте его.

<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>
18
ответ дан 2 December 2019 в 04:42
поделиться

ваши параметры: thing1 и thing2 , но вы ссылаетесь на некоторые переменные с именем asp1 и asp2 , которые, насколько я могу судить из предоставленного вами источника, не существуют.

Кроме того, я думаю, что вы ищете ассоциативный массив, который не создается с синтаксисом [] . См. Здесь для получения дополнительной информации:

http://www.quirksmode.org/js/associative.html

РЕДАКТИРОВАТЬ: Я не думаю, что в Javascript есть массив, который позволит вам делать то, что вы хотеть.

У вас может быть простой старый массив, который позволит вам выполнять настраиваемую сортировку или , вы можете иметь ассоциативный массив, который позволит вам иметь именованные значения.

С обычным массивом вы, очевидно, можете перебирать индексы.

В ассоциативном массиве вы можете перебирать имена, выполнив for (var key in myArray)

2
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: