首页 > 解决方案 > couchdb 简化为矩阵

问题描述

我有一个沙发数据库,​​里面有一系列像这样的文件

{
  "foo" :1,
  "bar" : 2
}
{
  "foo" :3,
  "bar" : 4
}

并试图创建一个减少到

{
   "ColumnNames" : ["foo","bar"],
   "Values" : [[1,3],[2,4]] 
}

但我目前坚持:

function (keys, values, rereduce) {
    var firstPass = {};
    for(var i = 0; i < values.length; i++ ){
        var v = values[i];
        for(var prop in v){
            if(v.hasOwnProperty(prop)){
                if (!firstPass.hasOwnProperty(prop)) {
                    firstPass[prop] = [];
                }
                var ve = v[prop];
                firstPass[prop].push(ve);
            }
        }
    }
    return firstPass;
}

减少到

{
   "foo" : [[1],[3]],
   "bar" : [[2],[4]]
}

我不知道怎么走剩下的路

标签: javascriptcouchdb

解决方案


对数据进行分组的好用例Map,然后在分组后传递给您的结果对象

const data = [{
    "foo": 1,
    "bar": 2
  },
  {
    "foo": 3,
    "bar": 4
  }
];

const m = new Map()

data.forEach(e => { 
  Object.entries(e).forEach(([k, v]) => {
    !m.has(k) && m.set(k, []);    
     m.get(k).push(v);
  });
});

const res = {
  ColumnNames: [...m.keys()],
  Values: [...m.values()]
}

console.log(res)
.as-console-wrapper {	max-height: 100% !important;}


推荐阅读