Javascript 从split()生成动态对象?

Javascript 从split()生成动态对象?,javascript,Javascript,只是好奇这将如何在Javascript中实现?假设我有一个对象,比如 var obj = { 'foo.bar.baz': 'valueA', 'foo.bar.qux': 'valueB' }; console.log(obj.foo.bar.baz); // valueA console.log(obj.foo.bar.qux); // valueB 如何迭代地将它们转换为嵌套对象,例如 var obj = { 'foo.bar.baz': 'valueA', 'foo.

只是好奇这将如何在Javascript中实现?假设我有一个对象,比如

var obj = {
  'foo.bar.baz': 'valueA',
  'foo.bar.qux': 'valueB'
};
console.log(obj.foo.bar.baz); // valueA
console.log(obj.foo.bar.qux); // valueB
如何迭代地将它们转换为嵌套对象,例如

var obj = {
  'foo.bar.baz': 'valueA',
  'foo.bar.qux': 'valueB'
};
console.log(obj.foo.bar.baz); // valueA
console.log(obj.foo.bar.qux); // valueB
我想是这样的吧

var ret=[];
for (var key in obj)
{
  var parts = key.split('.');

  for (var i in parts)
  {
    if (parts.hasOwnProperty(i))
    {
      // do something?
    }
  }
  ret.push(something);
}
一旦有了字符串(即“foo.bar.baz”),就可以递归调用创建新对象的函数

例如:

function buildObject(treeElements, value)
{
    var object = {};
    if(treeElements.length == 1)
    {
        object[treeElements.shift()] = value;
    }
    else
    {
        object[treeElements.shift()] = buildObject(treeElements, value);
    }
    return object;
}

只需将split()中的数组及其最终值传递给它即可。

另一个版本:

var obj = {
  'foo.bar.baz': 'valueA',
  'foo.bar.qux': 'valueB'
};

var obj2 = {};

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {

    var parts = key.split('.');
    var head = obj2;

    var limit = parts.length - 1;
    for (var i = 0; i < limit; i++) {
      var part = parts[i];
      head = head[part] || (head[part] = {});
    }
    head[parts[limit]] = obj[key];
  }
}

obj2 // =>
{ 
  foo: {
    bar: {
      baz: "valueA",
      qux: "valueB"
    }
  }
}
var obj={
‘foo.bar.baz’:‘valueA’,
'foo.bar.qux':'valueB'
};
var obj2={};
for(obj中的var键){
if(对象hasOwnProperty(键)){
var parts=键。拆分('.');
var水头=obj2;
var限制=零件长度-1;
对于(变量i=0;i
{ 
傅:{
酒吧:{
baz:“valueA”,
qux:“价值B”
}
}
}

如果要在此处使用,则需要额外的“合并”步骤来生成OP的结果。TOP应该能够自己计算出该步骤……不过我猜他更喜欢懒惰的方式--