如何解决如何基于另一个数组在Javascript中对该数组重新排序?
|real_order = [ \'1\',\'2\',\'3\',\'4\'];
friends = [ { name: \'jess\',id: \'4\'},{ name: \'alex\',id: \'1\'},{ name: \'kat\',id: \'3\' },{ name: \'bob\',id: \'2\' }
]
如何在real_order
中使\“ friends \”数组\“ match \”元素?
结果应为:
[
{ name: \'alex\',id: \'2\' },{ name: \'jess\',]
什么是最有效的解决方案?
解决方法
这是一些可以做到的代码:
var i,d = {},result = [];
for(i=0; i<friends.length; ++i)
{
d[friends[i].id] = friends[i];
}
for(i=0; i<real_order.length; ++i)
{
result.push(d[real_order[i]]);
}
它的作用是创建一个以每个朋友的ID为键的字典,然后使用第二个数组进行查找并构造新的数组。结果重新排序的数组存储在result中。
, 可以使用您自己的自定义排序算法对数组进行排序,因此您实际上不需要real_order
。这就是我要做的方式(编辑:添加了用于降序排序的排序委托):
var friends = [
{ id:4,name: \'jess\'},{ id:1,name: \'alex\'},{ id:3,name: \'kat\' },{ id:2,name: \'bob\' }
];
var order = function(a,b,desc){
return desc ? b.id - a.id : a.id - b.id;
},orderDesc: function(a,b){return order(a,true);};
var friendsOrdered = friends.sort( order );
alert(friendsOrdered[0].name); //=> alex
alert(friendsOrdered[3].name); //=> jess
//or sort descending
var friendsOrdered = friends.sort( orderDesc );
alert(friendsOrdered[0].name); //=> jess
alert(friendsOrdered[3].name); //=> alex
, 确保“ 1”在全球范围内,并且应该这样做:
friends.sort(function(a,b) {
if (real_order.indexOf(a.id) > real_order.indexOf(b.id)) {
return 1;
}else{
return -1;
}
});
, 一种命令解决方案。像jQuery一样丑陋,但是像John Resig这样的人出于某种原因喜欢这种风格:)
friends.sort(
(function(order){
return function(a,b) {
return order.indexOf(a.id)-order.indexOf(b.id);
}
})(real_order)
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。