【发布时间】:2016-06-28 13:00:33
【问题描述】:
Javascript 中如何根据另一个数组按键对对象进行排序?
这与PHP Sort an Array by keys based on another Array?这里的问题相同
但是对于 Javascript,我需要相同的过程。
谢谢
【问题讨论】:
-
看Eran的第二个答案并在JS中实现
标签: javascript arrays sorting
Javascript 中如何根据另一个数组按键对对象进行排序?
这与PHP Sort an Array by keys based on another Array?这里的问题相同
但是对于 Javascript,我需要相同的过程。
谢谢
【问题讨论】:
标签: javascript arrays sorting
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]; });
【讨论】:
正如 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
【讨论】: