下划线_.each函数 - 按值排序而不是键

时间:2016-03-30 22:38:04

标签: underscore.js

我有一个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}));
        });

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

javascript对象只是键/值对的散列图,无法对其进行排序(与数组不同)。另一方面,你可以&#34;排序&#34;通过移动字符来文件上的JSON对象。 但是当你将JSON作为一个对象读出并将其加载到内存中时,你会丢失这个假的&#34; sortness&#34;并根据JS引擎的实现方式遍历它的关键字。

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

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

但您可以做什么将值传输到数组并使用原生Array.prototype.sort函数对其进行排序。