JS - 将对象转换为对象数组,其中键是包含util库

时间:2017-08-06 16:06:52

标签: javascript arrays functional-programming

在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}))

有没有办法如何使用像lodashramba这样具有类似功能的众所周知的工具库来减少这个锅炉?

const objToArray = obj => keyProp =>
    Object.entries(obj)
        .map(([key, val]) => ({[keyProp]: key, ...val}))

我更喜欢使用现有的lib来创建自己的util函数。

2 个答案:

答案 0 :(得分:0)

如果您希望使用实用程序库(例如loadashunderscore更简单,那么这是一个简单的解决方案

_.map(obj, function(val, key) {
    return {
        name: key,
        someProp: val.someProp
    }
})

此代码适用于underscore.jsloadash,因为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, ' '))