UNPKG

3.93 kBSource Map (JSON)View Raw
1{"version":3,"file":"merge.js","sources":["../../src/merge.js"],"sourcesContent":["import {merge, sum} from \"d3-array\";\nimport {keys} from \"d3-collection\";\n\n/**\n @function merge\n @desc Combines an Array of Objects together and returns a new Object.\n @param {Array} objects The Array of objects to be merged together.\n @param {Object} aggs An object containing specific aggregation methods (functions) for each key type. By default, numbers are summed and strings are returned as an array of unique values.\n @example <caption>this</caption>\nmerge([\n {id: \"foo\", group: \"A\", value: 10, links: [1, 2]},\n {id: \"bar\", group: \"A\", value: 20, links: [1, 3]}\n]);\n @example <caption>returns this</caption>\n{id: [\"bar\", \"foo\"], group: \"A\", value: 30, links: [1, 2, 3]}\n*/\nfunction objectMerge(objects, aggs = {}) {\n\n const availableKeys = new Set(merge(objects.map(o => keys(o)))),\n newObject = {};\n\n availableKeys.forEach(k => {\n const values = objects.map(o => o[k]);\n let value;\n if (aggs[k]) value = aggs[k](values);\n else {\n const types = values.map(v => v || v === false ? v.constructor : v).filter(v => v !== void 0);\n if (!types.length) value = undefined;\n else if (types.indexOf(Array) >= 0) {\n value = merge(values.map(v => v instanceof Array ? v : [v]));\n value = Array.from(new Set(value));\n if (value.length === 1) value = value[0];\n }\n else if (types.indexOf(String) >= 0) {\n value = Array.from(new Set(values));\n if (value.length === 1) value = value[0];\n }\n else if (types.indexOf(Number) >= 0) value = sum(values);\n else if (types.indexOf(Object) >= 0) value = objectMerge(values.filter(v => v));\n else {\n value = Array.from(new Set(values.filter(v => v !== void 0)));\n if (value.length === 1) value = value[0];\n }\n }\n newObject[k] = value;\n });\n\n return newObject;\n\n}\n\nexport default objectMerge;\n"],"names":["const","let"],"mappings":"AAAA,QAAQ,KAAK,EAAE,GAAG,OAAO,UAAU,CAAC;AACpC,QAAQ,IAAI,OAAO,eAAe,CAAC;;;;;;;;;;;;;;;AAenC,SAAS,WAAW,CAAC,OAAO,EAAE,IAAS,EAAE;6BAAP,GAAG;AAAK;;EAExCA,GAAK,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,WAAC,EAAC,CAAC,SAAG,IAAI,CAAC,CAAC,IAAC,CAAC,CAAC,CAAC;QACzD,SAAS,GAAG,EAAE,CAAC;;EAErB,aAAa,CAAC,OAAO,WAAC,EAAC,CAAC,AAAG;IACzBA,GAAK,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,WAAC,EAAC,CAAC,SAAG,CAAC,CAAC,CAAC,IAAC,CAAC,CAAC;IACtCC,GAAG,CAAC,KAAK,CAAC;IACV,IAAI,IAAI,CAAC,CAAC,CAAC,IAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAC;SAChC;MACHD,GAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,WAAC,EAAC,CAAC,SAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,WAAW,GAAG,IAAC,CAAC,CAAC,MAAM,WAAC,EAAC,CAAC,SAAG,CAAC,KAAK,KAAK,IAAC,CAAC,CAAC;MAC9F,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,KAAK,GAAG,SAAS,GAAC;WAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QAClC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,WAAC,EAAC,CAAC,SAAG,CAAC,YAAY,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAC,CAAC,CAAC,CAAC;QAC7D,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAC;OAC1C;WACI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACnC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAC;OAC1C;WACI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAC;WACpD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAE,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,WAAC,EAAC,CAAC,SAAG,IAAC,CAAC,CAAC,GAAC;WAC3E;QACH,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,WAAC,EAAC,CAAC,SAAG,CAAC,KAAK,KAAK,IAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAC;OAC1C;KACF;IACD,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;GACtB,CAAC,CAAC;;EAEH,OAAO,SAAS,CAAC;;CAElB;;AAED,eAAe,WAAW,CAAC;"}
\No newline at end of file