Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 1.46 KB

orderWith.md

File metadata and controls

52 lines (46 loc) · 1.46 KB
标题 标签
orderWith(根据属性列表的顺序对数组排序) array,object(数组,对象)

根据提供的顺序数组,按属性对对象数组进行排序。

  • 使用 Array.prototype.reduce() 从顺序数组创建一个对象,其中值作为键,它们的原始索引作为值。
  • 使用 Array.prototype.sort() 对给定数组进行排序,跳过 order 数组中 prop 为空或不为空的元素。
const orderWith = (arr,prop,orders) => {
    const orderValues = orders.reduce((acc,item,i) => {
        acc[item] = i;
        return acc;
    },{});
    return [...arr].sort((a,b) => {
        if(orderValues[a[prop]] === undefined){
            return 1;
        }
        if(orderValues[b[prop]] === undefined){
            return -1;
        }
        return orderValues[a[prop]] - orderValues[b[prop]];   
    })
}

调用方式:

const users = [
  { name: 'fred', language: 'Javascript' },
  { name: 'barney', language: 'TypeScript' },
  { name: 'frannie', language: 'Javascript' },
  { name: 'anna', language: 'Java' },
  { name: 'jimmy' },
  { name: 'nicky', language: 'Python' },
];
orderWith(users, 'language', ['Javascript', 'TypeScript', 'Java']);
/*
[
  { name: 'fred', language: 'Javascript' },
  { name: 'frannie', language: 'Javascript' },
  { name: 'barney', language: 'TypeScript' },
  { name: 'anna', language: 'Java' },
  { name: 'jimmy' },
  { name: 'nicky', language: 'Python' }
]
*/

应用场景