Javascript 按数组对对象数组进行排序
我有一系列这样的物体Javascript 按数组对对象数组进行排序,javascript,Javascript,我有一系列这样的物体 var orders = [ { status: "pending" }, { status: "received" }, { status: "sent" }, { status: "pending" } ] 我想根据状态键的值对该对象数组进行排序,但要使对象的顺序与状态键的可能值数组的顺序相匹配 var statuses = ["pending", "sent", "received"] 因此,排序后,
var orders = [
{
status: "pending"
},
{
status: "received"
},
{
status: "sent"
},
{
status: "pending"
}
]
我想根据状态
键的值对该对象数组进行排序,但要使对象的顺序与状态
键的可能值数组的顺序相匹配
var statuses = ["pending", "sent", "received"]
因此,排序后,两个“挂起的”
对象将首先是“发送的”
对象,然后是“接收的”
对象
我怎样才能做到这一点?您可以使用
sort()
和indexOf()
来做到这一点
var订单=[{
状态:“待定”
}, {
状态:“已收到”
}, {
状态:“已发送”
}, {
状态:“待定”
}]
var状态=[“待定”、“已发送”、“已接收”]
var result=orders.sort(函数(a,b){
返回状态indexOf(a.status)-状态indexOf(b.status)
})
console.log(结果)
您可以使用sort()
函数:
var状态=[“待定”、“已发送”、“已接收”];
风险值订单=[
{
状态:“待定”
},
{
状态:“已收到”
},
{
状态:“已发送”
},
{
状态:“待定”
}
];
排序(函数(a,b){
返回状态indexOf(a.status)-状态indexOf(b.status);
});
控制台日志(订单)代码>使用方法对对象数组进行排序。其中使用对象存储键的索引,这有助于避免使用方法(速度较慢)
var订单=[{
状态:“待定”
}, {
状态:“已收到”
}, {
状态:“已发送”
}, {
状态:“待定”
}];
变量状态=[“待定”、“已发送”、“已接收”];
//生成在数组中保存索引的对象
//或者使用对象而不是保存索引的数组
var索引=状态。减少(功能(obj、k、i){
obj[k]=i;
返回obj;
}, {})
console.log(
排序(函数(a,b){
返回索引[a.status]-索引[b.status];
})
)
您可以使用对象作为排序顺序的哈希表
var orders=[{status:“pending”}、{status:“received”}、{status:“sent”}、{status:“pending”}],
状态={挂起:1,发送:2,接收:3};
排序(函数(a,b){
返回状态[a.status]-状态[b.status];
});
控制台日志(订单)代码>可以在排序回调中使用类似于indexOf()
的方法,但更有效的方法是首先构建索引的hashmap
var statIndex = statuses.reduce(function(a,c,i){
a[c] = i;
return a
},{})
orders.sort(function(a,b){
return statIndex[a.status] - statIndex[b.status]
})
如果status
是一个对象,状态名称为属性名称,属性值为排序权重,则效果更好。然后,排序比较函数就可以将这些值进行差异化。