javascript - 循环这个嵌套的 obj 构建器函数?

标签 javascript jquery loops build nested

我编写了这个笨拙的函数来获取两个字符串并从中创建一个对象。目标:

// buildObj("house.wall.paint.color", "blue");  
// returns {house: {wall: {paint: {color: "blue"}}}}

我可以在没有循环的情况下用蛮力完成它,但我确信它可以通过循环进行压缩和更优雅地完成。然而,当我尝试手动处理嵌套和索引时,我的脑袋在分形疯狂中爆炸了。

FIDDLE

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/

相关文章:

javascript - 从 React.children 渲染单个项目 - 如何?

javascript - 事件.click()开启和关闭

javascript - Angular JS : Not able to return the modified text area to JavaScript

javascript - 如何使链接在单击时打开多个页面

javascript - 调用 jQuery ajax 成功回调之外的函数?

javascript - Tearable Cloth 模拟适用于 Codepen,但不适用于本地

javascript - 通过循环删除DOM元素

java - 循环并重复捕获异常

java - 将计算值存储到数组中

c - 如何实现背包算法,其中数组的索引代表元素的重量