javascript - 将对象数组转换为具有 lodash 值的分组对象

标签 javascript lodash

我正在寻找一个紧凑的 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/

相关文章:

javascript - Lodash 或将两个对象数组与匹配键组合的最佳方法

javascript - Mongoose + lodash 扩展错误地复制对象数组

javascript - AngularJS Controller 不是一个函数,未定义(来自工厂的数据)

javascript - 打印出重复的数字

javascript - 如何为 Lodash flow 中的每个函数做一些事情?

webpack - 为什么在 Webpack 4 摇树之后,material-ui 模块同时显示在 node_modules 和 src 中?

javascript - 最大下拉列表选项的最佳经验法则是什么

javascript - 如何在Loopback中获取Model内的请求参数

javascript - 如何在 reactjs 中的数组数据中排列数组?

vue.js - 在去抖之前模拟加载旋转器