Lodash sort collection based on external array

前端 未结 5 719
名媛妹妹
名媛妹妹 2020-12-30 21:01

I have an array with keys like so:

[\'asdf12\',\'39342aa\',\'12399\',\'129asg\',...] 

and a collection which has these keys in each object

5条回答
  •  春和景丽
    2020-12-30 21:37

    This is the efficient & clean way:

    (Import lodash identity and sortBy):

    TS:

    function sortByArray({ source, by, sourceTransformer = identity }: { source: T[]; by: U[]; sourceTransformer?: (item: T) => U }) {
      const indexesByElements = new Map(by.map((item, idx) => [item, idx]));
      const orderedResult = sortBy(source, (p) => indexesByElements.get(sourceTransformer(p)));
      return orderedResult;
    }
    

    Or in JS:

    function sortByArray({ source, by, sourceTransformer = _.identity }) {
        const indexesByElements = new Map(by.map((item, idx) => [item, idx]));
        const orderedResult = _.sortBy(source, (p) => indexesByElements.get(sourceTransformer(p)));
        return orderedResult;
    }
    

提交回复
热议问题