Javascript Lodash按外部数组和内部属性排序

Javascript Lodash按外部数组和内部属性排序,javascript,sorting,lodash,Javascript,Sorting,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" }

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

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);
但年龄不是按描述顺序排序的。有什么方法可以使它工作吗?

除了订单(asc/desc)之外,


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 name:“John”,age:“1”},{name:“John name:“6”},{name:“Mandy”,age:“3”};
常量顺序=[“Shelly”、“John”、“Mandy”、“Kyle”];
const sortedArrByOrder=u.orderBy(arr,[person=>order.indexOf(person.name),'age'],['asc','desc']);
控制台日志(分拣机)

您可以接受回调并返回负年龄,并忽略订单的数组

const
arr=[{姓名:“曼迪”,年龄:“34”},{姓名:“雪莉”,年龄:“32”},{姓名:“凯尔”,年龄:“12”},{姓名:“凯尔”,年龄:“60”},{姓名:“曼迪”,年龄:“32”},{姓名:“曼迪”,年龄:“99”},{姓名:“雪莉”,年龄:“30”},{姓名:“约翰”,年龄:“3”},{姓名:“约翰”,年龄:“1”},{姓名:“约翰”,年龄:“6”},{姓名:“曼迪”,年龄:“3”},{,
订单=[“Shelly”、“John”、“Mandy”、“Kyle”],
sortedArrByOrder=u.sortBy(arr[
({name})=>order.indexOf(name),
({age})=>-年龄
]);
控制台日志(分拣机)
。作为控制台包装{最大高度:100%!重要;顶部:0;}

奇怪的是,
有两种几乎相同的方法。sortBy方法是从0.1.0开始使用的lodash方法,而orderBy是在4.0.0中添加的。可能是由于向后兼容,他们无法删除sortBy。因为我正在使用另一个列表对名称进行排序,所以第一个顺序的升序或降序设置是否重要
['asc','desc']
您不是在使用另一个列表对
名称进行排序,而是在使用
名称
和另一个列表生成数组排序所依据的值。因为这是一个值,所以排序顺序很重要。您可以将其更改为
desc
,然后查看。