我编写了这个笨拙的函数来获取两个字符串并从中创建一个对象。目标:
// buildObj("house.wall.paint.color", "blue");
// returns {house: {wall: {paint: {color: "blue"}}}}
我可以在没有循环的情况下用蛮力完成它,但我确信它可以通过循环进行压缩和更优雅地完成。然而,当我尝试手动处理嵌套和索引时,我的脑袋在分形疯狂中爆炸了。
var p1 = "house.wall.paint.color";
var p2 = "blue";
var arr = [];
var obj = [];
buildObj(p1, p2);
console.log(obj);
function buildObj(p1, p2) {
var keys = p1.split('.');
var val = p2;
var arr = $.merge(keys, [val]);
var prop = {};
var prop2 = {};
var prop3 = {};
var prop4 = {};
var last = arr.length - 1;
prop[arr[last - 1]] = arr[last];
obj = prop;
prop2[arr[last - 2]] = obj;
obj = prop2;
prop3[arr[last - 3]] = obj;
obj = prop3;
prop4[arr[last - 4]] = obj;
obj = prop4;
return obj;
}
最佳答案
你可以使用如下的循环
var p1 = "house.wall.paint.color";
var p2 = "blue";
var obj = {};
buildObj(obj, p1, p2);
console.log(obj);
function buildObj(obj, path, value) {
var keyPath = path.split(".");
var lastKeyIndex = keyPath.length-1;
for (var i = 0; i < lastKeyIndex; ++ i) {
key = keyPath[i];
if (!(key in obj)) {
obj[key] = {}
}
obj = obj[key];
}
obj[keyPath[lastKeyIndex]] = value;
}
关于javascript - 循环这个嵌套的 obj 构建器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42036627/