如何使用Javascript或JQuery按分数、性别和姓名排序排名

k2fxgqgv  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(209)

我有三个数组,如下所示(我有25000个这样的大数据,所以你也可以建议这是一个好的方法,为大量的数据):

var arrayScores =    [10, 21, 2, 35, 19, 85, 96, 70,  85,  19, 100, 11, 35, 70, 98, 81, 92];
var arrayGenders =   ['M', 'M', 'F', 'F', 'M', 'M', 'M', 'F',  'F',  'M',  'M', 'F', 'F', 'M', 'M', 'F', 'F'];
var arrayNames =     ['John', 'Fred', 'Jacque', 'Andrea', 'Andrew', 'Jacob', 'Dylan', 'Diana',  'Rahel',  'Raphael',  'Bob', 'Mariam', 'Fatma', 'Ahmed', 'Barack', 'Joyce', 'Taina'];

因此,我想先按分数(降序),然后按性别(升序),最后按姓名(升序)对这些数组进行排序,如下所示:

1.Bob-100, 2.Barack-98, 3.Dylan-96, 4.Taina-92, 5.Rahel-85, 6.Jacob-85, 7.Joyce-81, 8.Diana-70, 9.Ahmed-70, 10.Andrea-35, 11.Fatma-35, 12.Fred-21, 13.Andrew-19, 14.Raphael-19, 15.Mariam-11, 16.John-10, 17.Jacque-2

这是我的代码,但它没有提供我所期望的,因为我不知道如何排序它(我仍然是一个初学者学习JavaScript),请帮助!

var arrayScores =    [10, 21, 2, 35, 19, 85, 96, 70,  85,  19, 100, 11, 35, 70, 98, 81, 92];
var arrayGenders =   ['M', 'M', 'F', 'F', 'M', 'M', 'M', 'F',  'F',  'M',  'M', 'F', 'F', 'M', 'M', 'F', 'F'];
var arrayNames =     ['John', 'Fred', 'Jacque', 'Andrea', 'Andrew', 'Jacob', 'Dylan', 'Diana',  'Rahel',  'Raphael',  'Bob', 'Mariam', 'Fatma', 'Ahmed', 'Barack', 'Joyce', 'Taina'];
var rank = 1;
arrayScores.forEach((score, index) => {
  const gender = arrayGenders[index], name = arrayNames[index];
  console.log("Name: "+name+" Gender: "+gender+ " Score: "+score+ " Rank: "+rank);
rank++;
});
ctrmrzij

ctrmrzij1#

您可以在一次运行中构建对象和排序。
这种方法采用与最终属性同名的对象,并从条目创建对象数组。
排序是根据需要的属性进行的。对于直接值,比如性别,你可以用一个对象来表示需要的顺序。这允许添加更多的性别和顺序。

const
    score = [10, 21, 2, 35, 19, 85, 96, 70, 85, 19, 100, 11, 35, 70, 98, 81, 92],
    gender = ['M', 'M', 'F', 'F', 'M', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F'],
    name = ['John', 'Fred', 'Jacque', 'Andrea', 'Andrew', 'Jacob', 'Dylan', 'Diana', 'Rahel', 'Raphael', 'Bob', 'Mariam', 'Fatma', 'Ahmed', 'Barack', 'Joyce', 'Taina'],
    object = { score, gender, name },
    genders = { F: 1, M: 2 },
    data = Object
        .entries(object)
        .reduce((r, [k, values]) => values.map((v, i) => ({ ...r[i], [k]: v })), [])
        .sort((a, b) =>
            b.score - a.score ||
            genders[a.gender] - genders[b.gender]||
            a.name.localeCompare(b.name)
        );

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

相关问题