Javascript基于另一个数组按键对对象进行排序?

时间:2016-03-13 14:27:58

标签: javascript arrays sorting

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

这是与PHP Sort an Array by keys based on another Array?

相同的问题

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

由于

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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