mko*_*ala 23 javascript arrays sorting jquery underscore.js
给定一组对象:
{
key: "a",
value: 42
},
{
key: "d",
value: 28
},
{
key: "c",
value: 92
},
{
key: "b",
value: 87
}
和一组键:
["c", "a", "b", "d"]
Run Code Online (Sandbox Code Playgroud)
是否有ECMAScript函数或第三方JavaScript库,允许您在一行/函数调用中排序第一个对象数组,以匹配第二个数组中指定的键的顺序,结果是:
{
key: "c",
value: 92
},
{
key: "a",
value: 42
},
{
key: "b",
value: 87
},
{
key: "d",
value: 28
}
提供功能或算法的其他问题:
相似/相关问题:
McG*_*gle 45
只需使用indexOf将密钥转换为正确的顺序:
var order = ["c", "a", "b", "d"];
_.sortBy(arr, function(obj){
return _.indexOf(order, obj.key);
});
Run Code Online (Sandbox Code Playgroud)
如果有很多键,那么从数组中创建一个哈希映射是有利的,例如:
var order = ["c", "a", "b", "d"];
var orderMap = {};
_.each(order, function(i) { orderMap[i] = _.indexOf(order, i); });
Run Code Online (Sandbox Code Playgroud)
这使得键排序查找恒定时间而不是O(n).(小提琴)
Pet*_*rKA 20
到目前为止提供的答案很棒 认为以下也可能是普通JS中的替代解决方案:
var arr = arr.sort(function(a,b) {
return order.indexOf( a.key ) > order.indexOf( b.key );
//for the sake of recent versions of Google Chrome use:
//return a.key.charCodeAt(0) > b.key.charCodeAt(0); or return a.key.charCodeAt(0) - b.key.charCodeAt(0);
});
Run Code Online (Sandbox Code Playgroud)
var arr = [
{
key: "a",
value: 42
},
{
key: "d",
value: 28
},
{
key: "c",
value: 92
},
{
key: "b",
value: 87
}
];
var order = ["c", "a", "b", "d"];
console.log( 'Original: ', JSON.stringify( arr ) );
var arr = arr.sort(function(a,b) {
return order.indexOf( a.key ) > order.indexOf( b.key );
});
console.log( 'Ordered: ', JSON.stringify( arr ) );Run Code Online (Sandbox Code Playgroud)
const obj = [
{
key: "a",
value: 42
},
{
key: "d",
value: 28
},
{
key: "c",
value: 92
},
{
key: "b",
value: 87
}
]
const sortList = ["c", "a", "b", "d"];
const sortedObj = obj.sort((a, b) => {
return (
sortList.indexOf(a.key) - sortList.indexOf(b.key)
);
});
console.log(sortedObj );Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18179 次 |
| 最近记录: |