javascript - 将对象数组转换为具有 lodash 值的分组对象
问题描述
我正在寻找一个紧凑的 lodash 解决方案来获取对象数组,然后使用数组中对象的键和每个键的唯一值创建一个新对象。
[
{
color: "black",
type: "bag",
},
{
color: "red",
type: "pants",
},
{
color: "black",
type: "jacket",
},
]
期望的输出:
{
color: ["black", "red"],
type: ["bag", "pants", "jacket"],
}
谢谢!
解决方案
您可以使用 iteratee 解决此lodash#flatMap
问题lodash#toPairs
,以创建键和值数组对的扁平化版本。lodash#groupBy
与删除数组对的键的 iteratee 函数一起使用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 - 是否可以避免将参数隐式传递给子组件?
- database - 在本地数据库中镜像部分 redux 状态
- postgresql - 如何在 PostgreSQL 中设置带有日期和时间的两列之间的间隔?
- javascript - 单击按钮时未发送 Django Post 请求?
- javascript - Django 在模板中错误地将 float x.xx 转换为 x,xx
- javascript - 如何禁用指针事件,但允许拖动
- c# - Web API 更新的令牌认证
- angular - Akita Collection Service 中的 SyncCollection 太贵了?
- javascript - 将 JSON 从 PHP 发送到 Javascript(未定义)
- scala - Scala 中协变 HashMap 的替代方案