我有一个必须基于其他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] 删除。
我来说两句