将特定顺序的JavaScript对象数组排序(使用现有函数)

给定一个对象数组:
{
    key: "a",value: 42
},{
    key: "d",value: 28
},{
    key: "c",value: 92
},{
    key: "b",value: 87
}

和一组键:

["c","a","b","d"]

是否有一个ECMAScript函数或第三方JavaScript库,让您可以在一行/函数调用中排序第一个对象数组,以匹配第二个数组中指定的键的顺序,以使结果为:

{
    key: "c",{
    key: "a",value: 87
},value: 28
}

提供功能或算法的其他问题:

> Javascript – sort array based on another array – Stack Overflow
> javascript – How do I sort an array of objects based on the ordering of another array? – Stack Overflow

类似/相关问题:

> Sorting an Array of Objects in PHP In a Specific Order
> php – Sort array of objects

解决方法

只需使用indexOf将密钥转换为正确的顺序:
var order = ["c","d"];
_.sortBy(arr,function(obj){ 
    return _.indexOf(order,obj.key);
});

Fiddle

如果有很多键,那么将数组中的哈希映射放在一起是有利的,如:

var order = ["c","d"];
var orderMap = {};
_.each(order,function(i) { orderMap[i] = _.indexOf(order,i); });

这使得键排序查找的时间不是O(n). (Fiddle)

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...