Lodash sortby 先条件再检查其他条件

Lodash sortby first condition and then check for other conditions

我正在使用 lodash 在函数中按值排序。目前正在按值排序。不过,我想补充一个条件。我想让它首先按这个条件排序(意味着一个文件将等于某物),然后它会按值进行排序。

也就是说,有一项的名称是'Sally'。此项应排在第一位,然后其余项按值排序。

我对此做了很多研究,但在网上找不到任何东西。想知道是否有人遇到过这个问题。请看我的代码:

const sortByNameThenValue = () => {
  let result;
  
  result = sortBy(name, 'Sally') && sortBy(allowance, 'value').reverse();
}

我也在考虑链接它,但似乎效果不佳。如果你看到了什么,请告诉我。谢谢并感谢!

你没有提供任何样本数据,所以我只是做了一些东西。不需要包含 lowdash 库,因为排序已经在 Vanilla-JS 中可用。

const arr=[{name:"Fred",value:138},{name:"Harry",value:5},{name:"Sally",value:34},{name:"Andy",value:257},{name:"Sue",value:142},{name:"Peggy",value:33},{name:"Frank",value:85}];

function val(o){
 return o.value+(o.name==="Sally"?1e50:0)
}

console.log(arr.sort((a,b)=>
  val(b)-val(a)));

您可以在 lodash 中执行此操作:

const sorted = _.sortBy(
  people, 
  [(person) => person.name !== 'Sally', (person) => person.value]
);

sortBy 接受一个元素数组和一个函数数组,并且“[sort] in ascending order by the results of running each element in a collection thru each iteratee

这里还有一个sandbox演示

倒序排序:

const sorted = _.sortBy(people, [
  (person) => person.name === "Sally",
  (person) => person.value
]).reverse();