2017-04-07 76 views
-2

想象一下,我有以下对象:如何将一组属性转换为一组键值对?

"MyObject": { 
    "Foo": "b", 
    "Bar": "d", 
    "NewEngland": "12", 
    "GreenBay": "12", 
    "NewYork": "10", 
    "Seattle": "3" 
} 

我怎样才能将它转换为:

[{ 
    name: 'New England', value: 12 
}, { 
    name: 'Green Bay', value: 12 
}, { 
    name: 'New York', value: 10 
}, { 
    name: 'Seattle', value: 3 
}] 

请注意,我删除了FooBar属性。

理想情况下,我想使用ES6或lodash。

回答

2

这个怎么样?

_(MyObject).omit(['Foo', 'Bar']).map((value, name) => ({ name, value })).value()

你会使用lodash链接,先用不采取出它的键是该数组中的对象的键值对,那么你可以使用地图创建一个对象{ name: 'GreenBay', value: '12' }来自每个键值对。

1

一个ES6的解决办法是使用Set

let object = { 
 
    "Foo": "b", 
 
    "Bar": "d", 
 
    "NewEngland": "12", 
 
    "GreenBay": "12", 
 
    "NewYork": "10", 
 
    "Seattle": "3" 
 
} 
 

 
let keys = new Set(Object.keys(object)) 
 

 
keys.delete('Foo') 
 
keys.delete('Bar') 
 

 
let result = [...keys].map(k => ({name: k, value: object[k]})) 
 

 
console.log(result)

+0

我通过什么样的使用在这里设置的目的是不解。 – 2017-04-09 13:13:05

+0

如果你有一个'n'属性的列表可以省略,'Set'可以让你在线性时间内而不是二次的。 – gyre

相关问题