首页 > 解决方案 > Javascript Lodash按外部数组和内部属性排序

问题描述

我有一组人,我需要按定义的外部数组(顺序)然后按年龄进行排序。我正在使用 lodashsortBy

const _  = require('lodash');
const arr = [
  { name: "Mandy", age: "34" },
  { name: "Shelly", age: "32" },
  { name: "Kyle", age: "12" },
  { name: "Kyle", age: "60" },
  { name: "Mandy", age: "32" },
  { name: "Mandy", age: "99" },
  { name: "Shelly", age: "30" },
  { name: "John", age: "3" },
  { name: "John", age: "1" },
  { name: "John", age: "6" },
  { name: "Mandy", age: "3" }
];

let order = ["Shelly", "John", "Mandy", "Kyle"];

let sortedArrByOrder = _.sortBy(arr, [person => order.indexOf(person.name), 'age'], ['asc', 'desc']);

console.log(sortedArrByOrder);

但是年龄不是按降序排列的。有没有办法让它工作?

标签: javascriptsortinglodash

解决方案


您可以进行回调并返回负年龄并省略订单数组。

const
    arr = [{ name: "Mandy", age: "34" }, { name: "Shelly", age: "32" }, { name: "Kyle", age: "12" }, { name: "Kyle", age: "60" }, { name: "Mandy", age: "32" }, { name: "Mandy", age: "99" }, { name: "Shelly", age: "30" }, { name: "John", age: "3" }, { name: "John", age: "1" }, { name: "John", age: "6" }, { name: "Mandy", age: "3" }],
    order = ["Shelly", "John", "Mandy", "Kyle"],
    sortedArrByOrder = _.sortBy(arr, [
        ({ name }) => order.indexOf(name),
        ({ age }) => -age
    ]);

console.log(sortedArrByOrder);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


推荐阅读