如何通过lodash将{2:'b',3:'c',1:'a'}
转换为[{1:'a'},{2:'b'},{3:'c'}]
?
答案 0 :(得分:6)
使用Object.keys
+ Array.map
相当简单,你真的不需要lodash:
const obj = {2:'b',3:'c',1:'a'};
const arr = Object.keys(obj).map(key => ({ [key]: obj[key] }))
console.log(arr)
关于缺少sort
函数,上面的代码利用了数字索引的Object键(按照规范)顺序存储的事实。自己检查订单:
console.log({2:'b',3:'c',1:'a'})
以下是the spec
的相关部分9.1.12 [[OwnPropertyKeys]]()
当调用O的[[OwnPropertyKeys]]内部方法时 采取以下步骤:
让密钥成为新的空列表。
- 醇>
对于每个人 属性键P的O是一个整数索引,以升序数字表示 索引顺序
2a上。添加P作为键的最后一个元素。
答案 1 :(得分:2)
使用Object.entries
即将推出的Javascript,您可以使用单个对象映射新数组。
var data = {2:'b',3:'c',1:'a'},
result = Object
.entries(data)
.sort((a, b) => a[0] - b[0])
.map(([k, v]) => ({ [k]: v }));
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

使用lodash,您可以使用
var data = {2:'b',3:'c',1:'a'},
result = _
.chain(data)
.toPairs(data)
.sortBy([0])
.map(o => _.fromPairs([o]));
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
&#13;
答案 2 :(得分:1)
Lodash并不是真正需要完成你想要的东西,但我仍然会添加它并添加一个排序函数。我还包括原生JavaScript方式。
const obj = {b: 3, c: 2, a: 1};
const sortByKeys = object => {
const keys = Object.keys(object)
const sortedKeys = _.sortBy(keys)
return _.map(sortedKeys, key => ({ [key]: object[key]}))
}
// the lodash way, and sorted
console.log(sortByKeys(obj))
// simpler way
const result = Object.keys(obj)
.map(key => ({ [key]: obj[key] }))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
答案 3 :(得分:0)
为什么要用lodash?只需使用常规Javascript。可以稍微清理一下解决方案,但想法是遍历对象并将所需的格式推送到新的数组中。为方便起见,我也在那里抛出分类,但随意重新考虑你的喜好。
const obj = {2:'b',3:'c',1:'a'}
let newArr = [];
for (var key in obj) {
newArr.push({[key]: obj[key]})
newArr.sort((a, b) => a[key] > b[key])
}
console.log(newArr)