用点作为另一个字典扩展一个dict键

时间:2015-03-05 09:09:28

标签: javascript backbone.js

我的字典看起来像

var p = {
     'name' : "John",
     'personal.phone' : "123456",
     'office.phone.number' : "321654",
     'office.phone.extn': "4"
}

我想用扩展名为

的虚线键转换dict
{
     'name' : "John",
     'personal' : {
                       'phone' : "123456",
                  }
     'office' :   {
                        'phone' : { 
                                      number : "321654",
                                      extn : "4" 
                                  }
}

我为扩展单个密钥而编写的函数。但它没有退出循环

function expdictkey(str,v) {
    str = str.split(".").reverse();
    var p = {}
    for (var i = 0; i < str.length; i++)
    {
        p[str[i]] = p
        console.log(p)
    }
    return p;
}

expdictkey( “phone.number.extn”, “4”)

我从第一个dict的形式获取来自from的值,我想将它转换为第二个dict并将其放入模型中并保存。使用backbone.js和django rest服务器。在服务器中,模型采用第二个字典的形式。

1 个答案:

答案 0 :(得分:3)

你走了:

var p = {
  'name': "John",
  'personal.phone': "123456",
  'office.phone.number': "321654",
  'office.phone.extn': "4"
}




function unwrap() {
  var obj = {};
  for (var index in p) {
    var keys = index.split('.');
    var value = p[index];
    var ref = obj;
    for (var i = 0; i < keys.length; i++) {
      var key = keys[i];
      if (keys.length - 1 === i) {
        ref[key] = value;
      } else {
        if (ref[key] === undefined) {
          ref[key] = {}
        }
        ref = ref[key]
      }
    }
  }
  return obj;
}

unwrap(p);