我有一个包含对象的数组,如下所示:
[{
"first" : 1
},
{
"second" : 2
},
{
"third" : 3
}]
我想将其转换为两个数组,索引根据这些值进行匹配,例如:
["first","second","third"]
[1,2,3]
我可以遍历这个并获取对象键和值,但我觉得在lodash中必须有一个光滑的方式来做这个,我不知道。有什么建议?谢谢!
答案 0 :(得分:3)
您将获得第一个数组:
var items = [{a: "1"},{b: "blah",c: "what"},{d: "3"}]
keys = _(items).map(_.keys).flatten().value()
返回["a","b","c","d"]
第二个数组如:
values = _(items).map(_.values).flatten().value()
返回["1","blah","what","3"]
答案 1 :(得分:1)
对于非lodash解决方案:
var arr = [{"first" : 1},{"second" : 2},{"third" : 3}];
var keys = arr.map(function(el){return Object.keys(el)[0];});
var vals = arr.map(function(el){return el[Object.keys(el)[0]];});
对于相反的问题(将多个数组放入一个对象数组中),请参阅Merge two arrays into an array of objects with property values
答案 2 :(得分:0)
假设您的对象形状始终为{"label": value}
,那么您可以使用此vanilla JavaScript:
var data = [{"first" : 1},{"second" : 2},{"third" : 3}];
var labels = data.map(function(entry) {
return Object.keys(entry)[0];
});
var values = data.map(function(entry) {
return entry[Object.keys(entry)[0]];
});
根据您的评论,您的数据结构似乎不是最佳的。我会推荐一种替代结构:
var data = [
{'label': 'first', 'value': 1},
{'label': 'second', 'value': 2},
{'label': 'third', 'value': 3}
]
在普通的JavaScript中,将标签和值挑选成单独的部分是非常简单的:
var labels = data.map(function(entry) {
return entry.label;
});
var values = data.map(function(entry) {
return entry.value;
});
或者如果你真的想使用lodash:
var labels = _.pluck(data, 'label');
var values = _.pluck(data, 'value');
希望您可以看到,无论您是否使用lodash,这个修改后的结构都会使JavaScript变得更加简单。