我想使用lodash来转换像这样的对象:
var a = {1:'a', 3:'b', 2:'c'};
基于对象的键的排序值数组,如:
var result = ['a','c','b'];
我知道我可以这样做:
var keyRef = Object.keys(a).sort();
var result = keyRef.map(v => a[v]);
但这种方式是否已经优化 - 在lodash中是否有任何函数可以为此更优化?
答案 0 :(得分:4)
使用普通的Javascript,您可以使用Object.values
并将此数组作为排序结果,因为如果对象的键可以读取为32位整数,则Javascript将按数字顺序使用它们。
来源:
var object = { 1: 'a', 3: 'b', 2: 'c' },
values = Object.values(object);
console.log(values);
答案 1 :(得分:0)
使用lodash,
const o = {1:'a', 3:'b', 2:'c'};
const res = _.sortBy(o, (a, b) => b);
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.core.js"></script>
答案 2 :(得分:0)
Lodash具有_.values(obj)
功能。但是请注意,不保证结果排序。然而,正如@Nina指出的那样,如果你坚持使用整数作为键,那么顺序应该是一致的(除非lodash做了一些奇怪的事情)。