sort string

一般Array.prototype.sort用来排序数字,如果用来排序字符串,可以先转换成数字,然后方便排序

/**
 * 可自定义排序顺序,例如: ['limit', 'reverse', 'new'],就表示limit永远在最前面,然后是reverse,然后是new,最后是不在数组中的
 */
const sortGenerator = (order, sortProperty) => (a, b) => {

    const orderOfA = order.indexOf(a[sortProperty]);
    const orderOfB = order.indexOf(b[sortProperty]);

    if (orderOfA !== -1 && orderOfB !== -1) return orderOfA - orderOfB;
    if (orderOfA !== -1 && orderOfB === -1) return -1;
    if (orderOfA === -1 && orderOfB !== -1) return 1;
    if (orderOfA === -1 && orderOfB === -1) return 0;
};

这样,例如

    const test = [
        {
            promotionType: 'new',
        },
        {
            promotionType: 'reverse',
        },
        {
            promotionType: 'limit',
        },
    ];
    const sortFn = sortGenerator(['limit', 'reverse', 'new'], 'promotionType') // 定义顺序和排序的属性
    test.sort(sortFn)
    // 结果如下
    assert.deepEqual(test, [
        {
            promotionType: 'limit',
        },
        {
            promotionType: 'reverse',
        },
        {
            promotionType: 'new',
        },
    ]);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容