说我有对象:
obj {
1:{
index: 3
},
2:{
index: 1
},
3:{
index: 2
},
4:{
index: 0
}
}
我想将其转换为数组,但顺序为“索引”,因此输出应为
[ { index: 0 }, { index: 1 }, { index: 2 }, { index: 3 } ]
像_.values一样,但是能够按属性排序吗?
答案 0 :(得分:1)
您将找不到一种方法来完成您想要的所有事情。相反,您应该将操作分成较小的块并将它们链接起来。如您所写:
类似于
_.values
,但可以按属性排序
您写了两个操作:从映射中提取值(使用_.values
),然后按属性对结果数组进行排序(可以通过_.sortBy
完成)。
要在Lodash中启动一系列操作,请使用_.chain
,并使用chain.value()
来实现一个链接。
摘要:
const obj = {
1:{
index: 3
},
2:{
index: 1
},
3:{
index: 2
},
4:{
index: 0
}
};
const result = _.chain(obj)
.values()
.sortBy('index')
.value();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
答案 1 :(得分:1)
您实际上并不需要库,因为在普通JS中,实际上只有Object.values
然后是sort
都是相同的:
const obj = { 1:{ index: 3 }, 2:{ index: 1 }, 3:{ index: 2 }, 4:{ index: 0 } }
const result = Object.values(obj).sort((a,b) => a.index - b.index)
console.log(result)
但是,如果您确实需要lodash
,那么这实际上只是orderby
或sortBy
,因为它们可以处理不需要执行values
等的对象:
const obj = { 1:{ index: 3 }, 2:{ index: 1 }, 3:{ index: 2 }, 4:{ index: 0 } }
const result = _.orderBy(obj, 'index') // or _.sortBy
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>