【问题标题】:How to sort array of objects by properties with only one function?如何仅使用一个函数按属性对对象数组进行排序?
【发布时间】:2021-06-16 07:50:33
【问题描述】:

我有这个数组:

const list = [
    { color: 'white', size: 'XXL' },
    { color: 'red', size: 'XL' },
    { color: 'black', size: 'M' }
]

我想按colorsize的值排序:

colorSort = () => {
    list.sort((a, b) => (a.color > b.color) ? 1 : -1)
}
    
sizeSort = () => {
    list.sort((a, b) => (a.size> b.size) ? 1 : -1)
}

我不喜欢为排序创建 2 个函数。

有没有办法创建这样的函数:

sortArray = (value:string = 'color') => {
     #code here
}

【问题讨论】:

    标签: arrays typescript sorting


    【解决方案1】:

    你可以试试这个:

    function by<T extends keyof U, U>(property: T): (a: U, b: U) => number {
        return (a, b) => {
            return a[property] < b[property] ? -1 : a[property] > b[property] ? 1 : 0;
        };
    }
    
    const list = [
        { color: 'white', size: 'XXL' },
        { color: 'red', size: 'XL' },
        { color: 'black', size: 'M' }
    ];
    
    const listSortedByColor = [...list].sort(by("color"));
    
    const listSortedBySize = [...list].sort(by("size"));
    

    这里我们使用函数by 创建比较函数,该函数可以作为参数传递给 Array.sort 方法。我们可以使用 TypeScript 的高级类型系统来确保 by 是类型安全的,只允许属性作为实际存在于要排序的对象中的参数。

    记住:Array.sort 已就位。 :-)

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2023-01-06
      相关资源
      最近更新 更多