javascript - lodash 将对象数组转换为单个键数组和多个值数组

标签 javascript arrays node.js underscore.js lodash

我需要传输一些数据,该数据有太多键值对。 由于 key 相似,我不想将它们与每个对象一起传输。

假设我有以下数据:

[
    {
        x:11,
        y:12
    },{
        x:21,
        y:22
    },{
        x:31,
        y:32
    },{
        x:41,
        y:42
    }
];

我需要最终输出为
[ [x,y],[[11,12],[21,22],[31,32],[41,42]] ]
[ [x,y],[11,12],[21,22],[31,32],[41,42] ]

在另一端,我应该能够转换回其原始形式。 如果它能够处理某些对象中的附加键

,那就太好了

我想我已经看到了 lodash 或下划线函数与此接近/类似,但我现在无法找到它。

注意:我不知道 key 是什么

最佳答案

Lodash v4.17.1

修改原来的

var modifiedOriginal = _.chain(original)
    .map(_.keys)
    .flatten()
    .uniq()
    .thru(function(header){
        return _.concat(
            [header],
            _.map(original, function(item) {
                return _.chain(item)
                    .defaults(_.zipObject(
                        header, 
                        _.times(_.size(header), _.constant(undefined))
                     ))
                     .pick(header)
                     .values()
                     .value()
            })
         );  
     })
     .value();

修改回原来的(按键顺序不是 保证)

var backToOriginal = _.map(_.tail(modified), function(item) { 
     return _.chain(_.head(modified))
         .zipObject(item)
         .transform(function(result, val, key) {
             if (!_.isUndefined(val)) {
                 result[key] = val;
             }
          })
          .value();
 });

JSFiddle 代码 https://jsfiddle.net/wa8kaL5g/1/

关于javascript - lodash 将对象数组转换为单个键数组和多个值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625147/

相关文章:

javascript - 在组件中使用值之前检查该值是否存在的最佳做法是什么

python - 3D 矩阵元素与 2D 矩阵副本的高效逐元素乘法?

php - 如何将 Node.js 服务器连接到 Apache 服务器?

javascript - PM2 记录到带有时间戳的文件

javascript - 跨域 iframe 可以检测浏览器的实际视口(viewport)尺寸吗?

javascript - 无法从 CSV 下载 .json 文件到 JSON 转换并且无法将 JSON 转换为 CSV

javascript - 在 Codemirror 上显示 CoffeeScript Lint

arrays - LINQ - 根据数组 B 上的值从数组 A 中选择元素

java - ImageComponent3D 构造函数需要声明整数格式和 BufferedImage[] 数组

node.js - 安装睾丸时出错