在js中编写lib / framework代码API时,我通常更喜欢这样:
const definition = {
foo: {
someProp: 'foo-prop'
},
bar: {
someProp: 'bar-prop'
}
}
作为
的替代方案const definition2 = [
{ name: 'foo', someProps:'foo-prop'},
{ name: 'bar', someProps:'bar-prop'}
]
因为我发现以前的语法友好。
处理配置时,我当然更喜欢definition2
中所示的数组,所以我最终得到了这个转换代码:
const arrayDefinition = Object.entries(objDefinition)
.map(([key, val]) => ({name: key, ...val}))
有没有办法如何使用像lodash
或ramba
这样具有类似功能的众所周知的工具库来减少这个锅炉?
const objToArray = obj => keyProp =>
Object.entries(obj)
.map(([key, val]) => ({[keyProp]: key, ...val}))
我更喜欢使用现有的lib来创建自己的util函数。
答案 0 :(得分:0)
如果您希望使用实用程序库(例如loadash
或underscore
更简单,那么这是一个简单的解决方案
_.map(obj, function(val, key) {
return {
name: key,
someProp: val.someProp
}
})
此代码适用于underscore.js
和loadash
,因为map
函数适用于对象和数组。
答案 1 :(得分:-1)
您可以将原型添加到全局Object
Object.prototype.toArr = function(propName){
return Object.keys(this).map(key => Object.assign({[propName]:key}, this[key]));
}
const definition = {
foo: {
someProp: 'foo-prop'
},
bar: {
someProp: 'bar-prop'
}
}
let arr = definition.toArr('name');
console.log(JSON.stringify(arr, null, ' '))