如何通过基于Javascript中的另一个数组的键来对对象进行排序?JavaScript通过基于另一个数组的键排序对象?
这是因为这里PHP Sort an Array by keys based on another Array?
同样的问题,但我需要为Javascript相同的过程。
感谢
如何通过基于Javascript中的另一个数组的键来对对象进行排序?JavaScript通过基于另一个数组的键排序对象?
这是因为这里PHP Sort an Array by keys based on another Array?
同样的问题,但我需要为Javascript相同的过程。
感谢
的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
谢谢!完美,如果我们想要“dontSortMe =这个值不需要排序”在“地址”之后,而不是开始? – Xanarus
在这种情况下,脚本开始于:function sortArrayByArray(a,b) { return order.indexOf(b) - order.indexOf(a); }; var order = new Array('name','dob','address')。reverse(); – derloopkat
很好,谢谢! – Xanarus
看由叶兰第二应答和执行JS中的[排序基于ID的另一个阵列对象的数组](HTTP –
可能重复:// stackoverflow.com/questions/35538509/sort-an-array-of-objects-based-on-another-array-of-ids) –