根据JavaScript或jQuery中的其他数组值对数组进行排序

丹尼尔

我有一个必须基于其他3个数组值进行排序的数组列表。我能够成功地对一个数组进行排序,但对如何继续处理剩余的数组一无所知。如果我的逻辑错误,请更正。

let result = [
 {"name" : "two", "sports" : "football", "prize" : "first"},
 {"name" : "two", "sports" : "cricket", "prize" : "first"},
 {"name" : "two", "sports" : "cricket", "prize" : "second"},
 {"name" : "three", "sports" : "football", "prize" : "first"},
 {"name" : "one", "sports" : "football", "prize" : "first"},
 {"name" : "three", "sports" : "cricket", "prize" : "second"},
 {"name" : "one", "sports" : "cricket", "prize" : "second"},
 {"name" : "one", "sports" : "cricket", "prize" : "first"},
]
 
 let norder = ["one", "two", "three"];
 function courseSort(a, order, key) {
 const map = order.reduce((r, v, i) => ((r[v] = i), r), {})
 return a.sort((a, b) => map[a[key]] - map[b[key]])
 } 
result = courseSort(result, norder, `name`);  
console.log(result)

我另外两个数组是

let nsports = ["cricket", "football", "chess"];
let nprize = ["first", "second"];

除了根据第一个项目“名称”上的一个数组值进行排序外,保持相同,其他项目也需要进行排序和重新排序。预期产量如下

[
{"name" : "one", "sports" : "cricket", "prize" : "first"},
{"name" : "one", "sports" : "cricket", "prize" : "second"},
{"name" : "one", "sports" : "football", "prize" : "first"},
{"name" : "two", "sports" : "cricket", "prize" : "first"},
{"name" : "two", "sports" : "cricket", "prize" : "second"},
{"name" : "two", "sports" : "football", "prize" : "first"},
{"name" : "three", "sports" : "cricket", "prize" : "second"},    
{"name" : "three", "sports" : "football", "prize" : "first"},    
]

第一级排序应冻结字段名称,第二级冻结体育项目,第三级冻结奖品

请提出寻找解决方案的方法

您可以使用sort

var result = [ {"name" : "two", "sports" : "football", "prize" : "first"}, {"name" : "two", "sports" : "cricket", "prize" : "first"}, {"name" : "two", "sports" : "cricket", "prize" : "second"}, {"name" : "three", "sports" : "football", "prize" : "first"}, {"name" : "one", "sports" : "football", "prize" : "first"}, {"name" : "three", "sports" : "cricket", "prize" : "second"}, {"name" : "one", "sports" : "cricket", "prize" : "second"}, {"name" : "one", "sports" : "cricket", "prize" : "first"},];
let nsports = ["cricket", "football", "chess"];
let nprize = ["first", "second"];
let norder = ["one", "two", "three"];

var sortedarray = result.sort((a,b)=>{
    return norder.indexOf(a.name) - norder.indexOf(b.name) || nsports.indexOf(a.sports) - nsports.indexOf(b.sports) || nprize.indexOf(a.prize) - nprize.indexOf(b.prize)
});

console.log(sortedarray)

由于定义了其他数组,因此您可以仅根据类型使用or条件(对于多次排序)检查索引位置,然后在此基础上进行排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章