UNPKG

mano

Version:

Web application framework

39 lines (35 loc) 1.13 kB
'use strict'; var every = require('es5-ext/object/every') , forEach = require('es5-ext/object/for-each') , isPlainObject = require('es5-ext/object/is-plain-object') , isArray = Array.isArray, push = Array.prototype.push , re = /\[(\d*)\]$/; module.exports = function (data) { var toPush = {}; forEach(data, function (value, name) { var match = name.match(re), nuName, nuValue; if (!match) return; nuName = name.slice(0, -match[0].length); if (!data[nuName]) data[nuName] = []; if (match[1]) { data[nuName][match[1]] = value; } else { if (!toPush[nuName]) toPush[nuName] = []; if (isPlainObject(value) && every(value, isArray)) { nuValue = []; forEach(value, function (value, key) { value.forEach(function (value, index) { if (!nuValue[index]) nuValue[index] = {}; nuValue[index][key] = value; }); }); value = nuValue; } if (isArray(value)) push.apply(toPush[nuName], value); else toPush[nuName].push(value); } delete data[name]; }); forEach(toPush, function (items, name) { push.apply(data[name], items); }); return data; };