使用 lodash 对具有多个条件和未知键的对象进行排序
Sorting object with multiple conditions and unknown keys using lodash
我有一个带有动态键的对象,我需要按值对其进行排序,如果值之间存在联系,请使用该键按字母顺序排序。
示例输入:
const unsortedObj = {
"a": 2,
"b": 3,
"c" : 2
}
预期输出:
const sortedOutput = {
"b": 3,
"a": 2,
"c": 2
}
到目前为止,我已经将这个 lodash 链接至少按值排序,但无法弄清楚如何在出现平局时应用 second/alphabeutical 条件:
const sortedObj = _.fromPairs(
_.sortBy(_.toPairs(unsortedObj), 1).reverse()
);
对于复杂的排序,您应该使用 _.orderBy()
。
将迭代器(第二个参数)设置为您要排序的索引([1, 0]
)- 首先按索引 1 排序,如果有平局则按索引 0 排序。
将 orders
(第 3 个参数)设置为您希望对每个索引进行排序的方式 ([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>
我有一个带有动态键的对象,我需要按值对其进行排序,如果值之间存在联系,请使用该键按字母顺序排序。
示例输入:
const unsortedObj = {
"a": 2,
"b": 3,
"c" : 2
}
预期输出:
const sortedOutput = {
"b": 3,
"a": 2,
"c": 2
}
到目前为止,我已经将这个 lodash 链接至少按值排序,但无法弄清楚如何在出现平局时应用 second/alphabeutical 条件:
const sortedObj = _.fromPairs(
_.sortBy(_.toPairs(unsortedObj), 1).reverse()
);
对于复杂的排序,您应该使用 _.orderBy()
。
将迭代器(第二个参数)设置为您要排序的索引([1, 0]
)- 首先按索引 1 排序,如果有平局则按索引 0 排序。
将 orders
(第 3 个参数)设置为您希望对每个索引进行排序的方式 ([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>