首页 > 解决方案 > 基于另一个列表JS按字母顺序排序对象列表

问题描述

我想根据另一个字符列表和属性“名称”按字母顺序对对象列表进行排序

这是排序列表和我希望遵循的顺序,以便对我的列表进行排序:

 const SortingArray = [['a','á','à','â','ä','å','ã'],['b'],['c','ç'],['d'],
                      ['e','é','è','ê','ë'],['f'],['g'],['h'],['i','í','ì','î','ï'],
                      ['j'],['k'],['l'],['m'],['n','ñ'],['o','ó','ò','ô','ö','õ'],['p'],
                      ['q'],['r'],['s','š'],['t'],['u','ú','ù','û','ü'],
                      ['v'],['w'],['x'],['y','ý','ÿ'],['z','ž']];

这是我要排序的列表:

var listToSort = [{name: 'Étape',code: 'c12'},{name: 'Abc',code: 'c14'},{name: 'Ûrter',code: 'c15'}
]

标签: javascriptangulartypescriptlodash

解决方案


您可以通过实现一个排序函数来计算 SortingArray 中单词的第一个字符的索引,如下所示:

    listToSort.sort((a, b) => {
        const aIndex = SortingArray.findIndex(charArray => 
            charArray.includes(a.name[0].toLowerCase())
        );
        const bIndex = SortingArray.findIndex(charArray => 
            charArray.includes(b.name[0].toLowerCase())
        );
        return aIndex - bIndex;
    });

推荐阅读