我有一个复杂的嵌套 JavaScript 对象。要求是完全展平对象或仅展平其中的一些成员。
var obj = {
a: {
b: {
c: {
d: "Varun"
},
e: "kumar"
}
}
};
预期的结果对象:
{d: "Varun", e: "kumar"}
我编写了一个简单的转换实用程序,它将接受 {"abcd": "d"} 形式的访问器映射并将对象转换为新对象。我暂时不支持数组。此外,转换实用程序只能将复杂对象简化为更简单的对象,反之亦然(即从简单成员构造新成员对象)。
"use strict";
var ObjectUtil = (function () {
// constructor
var cls = function () {
};
// public static
cls.getValueFromAccessor = function (obj, accessor) {
if (obj == null || accessor == null)
return null;
return accessor.split(".").reduce(function(prev, current, index) {
var reducedObject = prev;
if (index == 1)
reducedObject = obj[prev];
if (reducedObject == null)
return null;
return reducedObject[current];
});
};
cls.transform = function(obj, accessorMap, overlay) {
var result;
if (overlay)
result = obj;
else
result = {};
for (var k in accessorMap) {
result[accessorMap[k]] = cls.getValueFromAccessor(obj, k);
}
return result;
};
return cls;
})();
var obj = {
a: {
b: {
c: {
d: "Varun"
},
e: "kumar"
}
}
};
var accessorMap = {
"a.b.c.d": "d",
"a.b.e": "e"
}
ObjectUtil.getValueFromAccessor(obj, "a.b.c.d");
console.log(ObjectUtil.transform(obj, accessorMap, false));
console.log(ObjectUtil.transform(obj, accessorMap, true));
是否有将对象从一种形式转换为另一种形式的标准方法。有任何可用的库吗?