使用lodash对具有多个条件和未知键的对象进行排序



我有一个带有动态键的对象,我需要按值排序,如果值之间有联系,请使用键按字母顺序排序。

示例输入:


const unsortedObj = { 
"a": 2, 
"b": 3, 
"c" : 2 
}

预期输出:

const sortedOutput = {
"b": 3,
"a": 2,
"c": 2
}

到目前为止,我已经得到了这个lodash链接,至少可以根据值进行排序,但不知道当出现平局时如何应用第二个/alpubeutical条件:

const sortedObj = _.fromPairs(
_.sortBy(_.toPairs(unsortedObj), 1).reverse()
);

对于复杂排序,应该使用_.orderBy()

将iteratees(第二个参数(设置为要按([1, 0](排序的索引-首先按索引1排序,如果有按索引0排序的平局。

orders(第三个参数(设置为对每个索引进行排序的方式([desc, asc](-按索引1降序排序,但按索引0升序排序。

const unsortedObj = {
"a": 2,
"b": 3,
"c": 2
}
const sortedObj = _.fromPairs(
_.orderBy(
_.toPairs(unsortedObj),
[1, 0],
['desc', 'asc']
)
);
console.log(sortedObj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>

使用lodash/fp,您可以使用_.flow():创建可重复使用和可读的函数

const fn = _.flow(
_.toPairs,
_.orderBy([1, 0], ['desc', 'asc']),
_.fromPairs
)
const unsortedObj = {
"a": 2,
"b": 3,
"c": 2
}
const sortedObj = fn(unsortedObj);
console.log(sortedObj)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

最新更新