如何根据Javascript中的另一个数组按键对对象进行排序?
这是与PHP Sort an Array by keys based on another Array?
相同的问题但是我需要Javascript的相同过程。
由于
答案 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