使用 lodash 从对象 属性 和值的集合创建两个数组
Create two arrays from a collection of object property and values with lodash
我有一个包含对象的数组,如下所示:
[{
"first" : 1
},
{
"second" : 2
},
{
"third" : 3
}]
我想把它变成两个数组,根据这些值匹配索引,例如:
["first","second","third"]
[1,2,3]
我可以遍历它并获取对象键和值,但我觉得在 lodash 中必须有一种巧妙的方法来做到这一点,我不知道。有什么建议么?谢谢!
看来您只需要映射对象并调用 keys() and values()
您将得到第一个数组:
var items = [{a: "1"},{b: "blah",c: "what"},{d: "3"}]
keys = _(items).map(_.keys).flatten().value()
returns ["a","b","c","d"]
第二个数组如:
values = _(items).map(_.values).flatten().value()
returns ["1","blah","what","3"]
假设你的对象形状总是{"label": value}
,那么你可以使用这个香草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');
希望你能看到这个修改后的结构让 JavaScript 无论你是否使用 lodash 都变得更加简单。
对于非 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]];});
相反的问题(多个数组变成一个对象数组),见
我有一个包含对象的数组,如下所示:
[{
"first" : 1
},
{
"second" : 2
},
{
"third" : 3
}]
我想把它变成两个数组,根据这些值匹配索引,例如:
["first","second","third"]
[1,2,3]
我可以遍历它并获取对象键和值,但我觉得在 lodash 中必须有一种巧妙的方法来做到这一点,我不知道。有什么建议么?谢谢!
看来您只需要映射对象并调用 keys() and values()
您将得到第一个数组:
var items = [{a: "1"},{b: "blah",c: "what"},{d: "3"}]
keys = _(items).map(_.keys).flatten().value()
returns ["a","b","c","d"]
第二个数组如:
values = _(items).map(_.values).flatten().value()
returns ["1","blah","what","3"]
假设你的对象形状总是{"label": value}
,那么你可以使用这个香草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');
希望你能看到这个修改后的结构让 JavaScript 无论你是否使用 lodash 都变得更加简单。
对于非 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]];});
相反的问题(多个数组变成一个对象数组),见