通过字符串键/路径生成嵌套对象结构

Cai*_*ifa 13 javascript associative-array

我想创建一个函数createAssociativeArray,它将返回两个参数:stringobject,像这样:

function createAssociativeArray(string, object) {
  //...
}
Run Code Online (Sandbox Code Playgroud)

最后一项string应该获取object数据.查看使用/返回示例:

createAssociativeArray('key1.key2.key3', {
  data1: 1,
  data2: 2,
  data3: 3
});

// key1: {
//   key2: {
//     key3: {
//       data1: 1,
//       data2: 2,
//       data3: 3
//     }
//   }
// }
Run Code Online (Sandbox Code Playgroud)

什么是最简单,最健壮的方法?

使用eval不是可能的.


我尝试了什么:

function createAssociativeArray(string, object) {
  string = string.split('.');
  return string.reduce(function(_object, _target, i) {
    _object[_target] = (i + 1 === string.length ? object : {});
    return _object;
  }, {});
}
Run Code Online (Sandbox Code Playgroud)

它没有产生预期的结果,因为对象被重置{}.

[ JSFiddle ]

小智 5

这是我想出的:

function createAssociativeArray(string, object) {
  var parts = string.split('.');
  var last = parts[parts.length - 1];
  var tree = {};

  var node = parts.slice(0, -1).reduce(function (memo, current) {
     return (memo[current] = {});
  }, tree);

  node[last] = object;
  return tree;
}
Run Code Online (Sandbox Code Playgroud)