说我有异议:
obj {
1:{
index: 3
},
2:{
index: 1
},
3:{
index: 2
},
4:{
index: 0
}
}
我想把它转换成一个数组,但是按"index“的顺序,所以输出应该是
[ { index: 0 }, { index: 1 }, { index: 2 }, { index: 3 } ]
就像_.values,但是能够根据属性进行排序吗?
发布于 2018-10-22 06:17:40
你不会找到一种方法来做你想做的任何事情。相反,您应该将您的操作分成更小的块,并将它们链接起来。所以正如你所写的:
类似于
_.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>
发布于 2018-10-22 08:20:24
您真的不需要这样的库,因为在普通的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>
https://stackoverflow.com/questions/52930957
复制相似问题