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

2022-08-16 00:00:00 javascript associative-array

我想创建一个名为createAssociativeArray的函数,它将接收两个参数:stringobject,如下所示:

function createAssociativeArray(string, object) {
  //...
}
string的最后一项应获取object数据。请参阅使用/返回示例:

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

// key1: {
//   key2: {
//     key3: {
//       data1: 1,
//       data2: 2,
//       data3: 3
//     }
//   }
// }

最简单、最可靠的方法是什么?

不能使用评估IS。


我尝试的内容:

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

未产生预期结果,因为对象已重置为{}

[JSFiddle]


解决方案

这是我想出来的:

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;
}

相关文章