UNPKG

in-other-words

Version:

will help you reorganize JSON to understand data or draw a graph.

63 lines (61 loc) 1.92 kB
function inOtherWords(dataSet, groupBy, format) { var q = [] var output = {} for (const l in format) { if (format[l].method != "average" && format[l].method != "sum" && format[l].method != "list"){ console.error("method error: " + format[l].method) return {} } q.push({outputKey: l, inputKey: format[l].key, method: format[l].method}) } function create(row) { output[row[groupBy]] = {} for (const j in q) { if (!row.hasOwnProperty(q[j].inputKey)){ return false } if (q[j].method === "list"){ output[row[groupBy]][q[j].outputKey] = [row[q[j].inputKey]] }else if(q[j].method === "average" || q[j].method === "sum") { output[row[groupBy]][q[j].outputKey] = row[q[j].inputKey] } } output[row[groupBy]].length = 1 return true } function update(row) { for (const j in q) { if (!row.hasOwnProperty(q[j].inputKey)){ return false } if (q[j].method === "list"){ output[row[groupBy]][q[j].outputKey].push(row[q[j].inputKey]) }else if(q[j].method === "sum") { output[row[groupBy]][q[j].outputKey] += row[q[j].inputKey] }else if(q[j].method === "average") { output[row[groupBy]][q[j].outputKey] = (output[row[groupBy]][q[j].outputKey]*output[row[groupBy]].length+row[q[j].inputKey])/(output[row[groupBy]].length+1) } } output[row[groupBy]].length += 1 return true } for (const i in dataSet) { if(!dataSet[i].hasOwnProperty(groupBy)){ console.error("groupBy value error: " + groupBy) return {} } if(output.hasOwnProperty(dataSet[i][groupBy])){ if(!update(dataSet[i])){ console.error("inputKey error") return {} } }else{ if(!create(dataSet[i])){ console.error("inputKey error") return {} } } } return output } module.exports = inOtherWords