【问题标题】:Javascript sort an object by keys based on another Array?Javascript基于另一个数组按键对对象进行排序?
【发布时间】:2016-06-28 13:00:33
【问题描述】:

Javascript 中如何根据另一个数组按键对对象进行排序?

这与PHP Sort an Array by keys based on another Array?这里的问题相同

但是对于 Javascript,我需要相同的过程。

谢谢

【问题讨论】:

标签: javascript arrays sorting


【解决方案1】:

JavaScript 规范不要求对象键保持它们的顺序,因此尝试对它们进行排序是不安全的。实现标准取决于每个环境,每个浏览器的执行方式不同。我相信大多数现代浏览器都会按照先进先出的方式对键进行排序,但由于它不是标准的一部分,因此在生产代码中信任它是不安全的。它也可能在较旧的浏览器中中断。最好的办法是将对象键放入一个数组中,对该数组进行排序,然后通过排序后的键访问对象的值。

var myObject = { d: 3, b: 1, a: 0, c: 2 },
    sortedKeys = Object.getOwnPropertyNames(myObject).sort();

如果需要,您可以将排序后的值映射到新数组中。

var orderedValues = sortedKeys.map(function (key) { return myObject[key]; });

【讨论】:

    【解决方案2】:

    正如 QED2000 指出的那样,即使您创建了一个新对象,也不能保证属性将保持特定顺序。但是,您可以根据不同的数组对键进行排序。

    <script>
        function sortArrayByArray(a, b)
        {
            return order.indexOf(a) - order.indexOf(b);
        }
        var order = new Array('name', 'dob', 'address');
        var customer = new Array();
        customer['address'] = '123 fake st';
        customer['name'] = 'Tim';
        customer['dob'] = '12/08/1986';
        customer['dontSortMe'] = 'this value doesnt need to be sorted';
        var orderedKeys = Object.keys(customer).sort(sortArrayByArray);
        orderedKeys.forEach(function (key) {
            document.write(key + "=" + customer[key] + "<br/>");
        });
    </script> 
    

    输出是

    dontSortMe=this value doesnt need to be sorted
    name=Tim
    dob=12/08/1986
    address=123 fake st
    

    【讨论】:

    • 谢谢!完美,如果我们想要“dontSortMe=this value doesn't need to be sorted”在“address”之后,而不是开头呢?
    • 在这种情况下,脚本开始于: function sortArrayByArray(a, b) { return order.indexOf(b) - order.indexOf(a); }; var order = new Array('name', 'dob', 'address').reverse();
    猜你喜欢
    • 2019-06-11
    • 2016-12-23
    • 2017-09-12
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多