【问题标题】:Sort the array based on other array values in JavaScript or jQuery根据 JavaScript 或 jQuery 中的其他数组值对数组进行排序
【发布时间】:2020-06-10 17:53:15
【问题描述】:

我有一个数组列表,它必须根据其他 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"},    
]

第一级排序应该冻结字段名称,第二级是运动,第三级是奖

请提出解决方法

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    您可以使用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)

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

    【讨论】:

    • 太好了,感谢您的支持和解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多