Lodash OrderBy具有子属性

时间:2016-12-10 15:43:56

标签: javascript lodash

我有一个要求,我应该按对象属性和子属性排序,有没有更好的方法来处理它。

const testData=[{id:1,name:"test",notes:"test notes",child:[{name:"weight",value:3},{name:"category",value:"testCategory"},{name:"amount",value:2}]},{id:2,name:"test2",notes:"test notes2",child:[{name:"weight",value:4},{name:"category",value:"testCategory"},{name:"amount",value:3}]}]

我需要按名称(asc)和类别(desc)排序

我单独知道如下

_.orderBy(testData,['notes'],[asc])
_.orderBy(testData,(t)=>{
              return  _.filter(t.child, (c)=> {
                             return c.name == "category"
                         })[0]['value']

          }

如何在单个订单中合并它们两个

2 个答案:

答案 0 :(得分:1)

使用 iteratee函数创建一个 Array ,其中包含您要订购的数据。

例如,如果我们可以假设有.child名为类别那么

_.orderBy(testData, data => {
    return [
        data.notes,
        data.child.find(child => child.name === 'category').value
    ];
}, ['asc', 'desc']);

答案 1 :(得分:1)

使用多个标识迭代器

_.orderBy(
    testData, 
    [
        'notes',
         function(item) {
             return _.chain(item).get('child').find({name: 'category'}).get('value').value();
         }
    ], 
    ['asc', 'desc']
);