gpt4 book ai didi

javascript - 如何使用 lodash orderBy 对具有深层嵌套属性的对象数组进行排序?

转载 作者:行者123 更新时间:2023-12-05 07:06:03 27 4
gpt4 key购买 nike

这是从 lodash 使用 orderBy 的推荐方式

 const data = _.orderBy(array_of_objects, ['type','name'], ['asc', 'desc']); - instead of keys 

有没有办法做这样的事情?而不是对象键 ['type','name'] 我可以像这样将键路径作为字符串数组传递吗 ['type.id','name.entry']

因此预期结果将是一个基于深度值的排序数组。

 const data = _.orderBy(array_of_objects, ['type.id','name.entry'], ['asc', 'desc']); - instead of keys 

我问这个是因为我们可以像这样使用 lodash _.get() 访问对象的深层属性。

_.get(object, 'a[0].b.c');
// => 3

所以必须有一种方法可以使用 _.orderBy()

注意如果有在 vanilla js 中执行此操作的方法,也请提出建议。

目前在我的例子中,这并没有对我传递的每个键进行排序 ['type.id','name.entry'] 只有其中一个在工作。

如果这不可能,请建议我如何根据多个深度嵌套的 Prop (作为字符串路径传递)对具有深度嵌套 Prop 的数组对象进行排序

最佳答案

orderBy确实接受回调,如果您需要根据多个属性进行排序,这可以是一个函数列表。此语法基于 Lodash 4.x。

// for ordering based on a single attribute
const orderedData = _.orderBy(arrayOfObject, item => item.id, ['desc']);

// for ordering based on multiple attributes
const orderedData = _.orderBy(arrayOfObject, [
item => item.id,
item => item.entry,
], ['desc', 'asc']);

下面是一个示例,说明如何根据每个对象中的嵌套属性进行排序:

const items = [
{
id: 1,
entry: 'a',
nested: { val: 5 },
},
{
id: 5,
entry: 'five',
nested: { val: 1 },
},
{
id: 3,
entry: 'three',
nested: { val: 2 },
},
{
id: 2,
entry: 'two',
nested: { val: 3 },
},
{
id: 4,
entry: 'four',
nested: { val: 4 },
},
];


const nestedValueComparator = item => _.get(item, 'nested.val');

const nestedData = _.orderBy(items, nestedValueComparator, ['asc']);

关于javascript - 如何使用 lodash orderBy 对具有深层嵌套属性的对象数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com