js中带有大写的数字的对象如何排序?

作者站长头像
站长
· 阅读数 20
arr=[{km:'混合一组',rc:10},{km:'混合二组',rc:11},{km:'混合三组',rc:10},{km:'混合二组',rc:10},{km:'混合三组',rc:10},{km:'混合四组',rc:10},,{km:'混合四组',rc:10}]

使用arr.sort((a,b)=>(a.km.localeCompare(b.km, 'zh-Hans-CN'))排序,为何不能按照"混合一组、混合二组、混合三组..."的顺序,而是"混合二组、混合三组、混合四组、混合一组"?

回复
1个回答
avatar
test
2024-06-26

如果您希望按照大写数字来排序数组中的对象,您可以编写一个自定义的比较函数,该函数将对象中的大写数字提取出来并将其转换为对应的阿拉伯数字,然后进行比较。以下是一个示例:

// 定义一个函数,将大写数字转换为阿拉伯数字
function convertChineseNumberToArabic(chineseNumber) {
    var chineseNumberMap = {
        '一': 1,
        '二': 2,
        '三': 3,
        // 添加更多大写数字映射
    };

    return chineseNumberMap[chineseNumber];
}

// 定义一个自定义比较函数
function customSort(a, b) {
    // 提取对象中的大写数字并转换为阿拉伯数字
    var numA = convertChineseNumberToArabic(a.km.charAt(2));
    var numB = convertChineseNumberToArabic(b.km.charAt(2));

    // 比较转换后的数字
    return numA - numB;
}

// 您的对象数组
var arr = [
    { km: '混合一组', rc: 10 },
    { km: '混合二组', rc: 11 },
    { km: '混合三组', rc: 10 },
    { km: '混合二组', rc: 10 },
    { km: '混合三组', rc: 10 },
    { km: '混合四组', rc: 10 },
    { km: '混合四组', rc: 10 }
];

// 使用自定义比较函数进行排序
arr.sort(customSort);

// 输出排序后的数组
console.log(arr);

这个示例中,我们首先定义了一个函数convertChineseNumberToArabic,用于将大写数字转换为阿拉伯数字的映射。然后,我们定义了一个自定义的比较函数customSort,该函数提取对象中的大写数字,并使用映射后的数字进行比较。最后,我们使用Array.sort()方法对数组进行排序,输出排序后的数组。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容