Underscore _.each 函数 - 按值而不是键排序

Underscore _.each function - sorting by value not key

我有一个 JSON 对象,它是根据值而不是键按字母顺序排序的。但是,当我使用 _.each 将对象注入到 $select 形式时,对象正在根据键对其进行求助。有谁知道我该如何防止这种情况。

var $select = $("#tunnel-list");
        var tpl = _.template('<option value="<%= id %>"><%= name %></option>');
        _.each(tunnels, function(name, index) {
            console.log(name, index)
            $select.append(tpl({id: index, name:  name}));
        });

您可能在谈论 JavaScript 对象,因为 JSON 是数据的字符串表示形式,类似于 JavaScript 语法。

如果您有对象,则无法保证其元素顺序。您只能使用需要更改数据结构的数组对其进行排序。

希望以下 link 也能回答您的问题:Does JavaScript Guarantee Object Property Order?

一个javascript对象只是一个key/value对的hashmap,它不能被排序(不像一个数组)。另一方面,您可以通过移动字符来 "Sort" 一个文件上的 JSON 对象。 但是,当您将 JSON 作为对象读取并将其加载到内存中时,您会丢失这个伪造的 "sortedness" 并根据 JS 引擎的实现方式遍历它的键。

下划线 _.each 函数只是一个 for 循环的包装器,该循环遍历 key/value 对并在它们上运行一个函数。你应该使用 _.each 来遍历数组。

TL;DR : 你不能对对象进行排序

但是您可以将值传输到数组并使用本机 Array.prototype.sort 函数对其进行排序。