您的位置:首页 > Web前端 > JavaScript

JavaScript对象的扁平化与反扁平化

2016-06-22 20:40 423 查看
function flatten(obj) {
var result = {};
function process(key, value) {
if (Object(value) !== value) {
if (key) {
result[key] = value;
}
} else if (Array.isArray(value)) {
for (var i = 0, len = value.length; i < len; i++) {
process(key + "[" + i + "]", value[i]);
}
if (value.length === 0 && key) {
result[key] = [];
}
} else {
var isEmpty = true;
for (var prop in value) {
isEmpty = false;
process((key ? key + "." : key) + prop, value[prop]);
}
if (isEmpty && key) {
result[key] = {};
}
}
}
process("", obj);
return result;
}

function unflatten(obj) {
if (Object(obj) !== obj || Array.isArray(obj)) {
return obj;
}
var result = {};
var r = /\.?([^\.\[\]]+)|\[(\d+)\]/g;
for (var prop in obj) {
var matchs;
var cur = result;
var p = "";
while(matchs = r.exec(prop)) {
cur = cur[p] || (cur[p] = matchs[2] ? []: {});
p = matchs[2] || matchs[1];
}
cur[p] = obj[prop];
}
return result[""] || result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: