我正在寻找一个紧凑的 lodash 解决方案来获取一个对象数组,然后使用数组中对象的键和每个键的唯一值创建一个新对象。
[
{
color: "black",
type: "bag",
},
{
color: "red",
type: "pants",
},
{
color: "black",
type: "jacket",
},
]
期望的输出:
{
color: ["black", "red"],
type: ["bag", "pants", "jacket"],
}
谢谢!
最佳答案
您可以使用 lodash#flatMap
解决此问题用lodash#toPairs
iteratee,创建键和值数组对的扁平化版本。使用 lodash#groupBy
用一个迭代函数删除数组对的键,Array#shift
,并使用这样的值作为集合的分组键。最后,使用 lodash#mapValues
迭代器由 lodash#flatten
组成和 lodash#uniq
, 展平数组并只获取每个分组数组的唯一值。请注意,函数组合使用 lodash#flow
组合连续的函数参数以形成一个函数结果。
var result = _(array)
.flatMap(_.toPairs)
.groupBy(v => v.shift())
.mapValues(_.flow(_.flatten, _.uniq))
.value();
var array = [
{
color: "black",
type: "bag",
},
{
color: "red",
type: "pants",
},
{
color: "black",
type: "jacket",
}
];
var result = _(array)
.flatMap(_.toPairs)
.groupBy(v => v.shift())
.mapValues(_.flow(_.flatten, _.uniq))
.value();
console.log(result);
.as-console-wrapper{min-height:100%;top:0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
关于javascript - 将对象数组转换为具有 lodash 值的分组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003461/