javascript - 将 key 分解为深层 Javascript 对象

标签 javascript

我想遍历以下数组,并分解为对象,来自:

data = [
  {k: "a_b_c", v: 1},
  {k: "a_b_c", v: 2},
  {k: "a_b_c", v: 3},
  {k: "a_b_d", v: 1},
  {k: "a_b_d", v: 2},
  {k: "a_b_d", v: 3},
  {k: "a_c_a", v: 1},
  {k: "a_c_b", v: 2},
  {k: "a_d", v: 1},
  {k: "a_d", v: 2}
]

到:

result = {
  a: {
    b: {
      c: [1,2,3],
      d: [1,2,3]
    },
    c: {
      a: [1],
      b: [2]
    },
    d: [1,2]
  },
}

关于巧妙地实现这一点有什么想法吗?

最佳答案

编辑:OP 改变了问题中数据的呈现方式。 以下解决方案对于代码中提到的先前数据是正确的。

您提到的对象无效。不能有重复的键。 但是,对于唯一键,这应该是实现此目的的方法:

var result = {};

data = {
  "a_b_c": 1,
  "a_b_c": 2,
  "a_b_c": 3,
  "a_b_d": 1,
  "a_b_d": 2,
  "a_b_d": 3,
  "a_c_a": 1,
  "a_c_b": 2
}


for(the_key in data)
{
    new_keys = the_key.split("_");
    result[new_keys[0]] =  result[new_keys[0]] || {};
    result[new_keys[0]][new_keys[1]] = result[new_keys[0]][new_keys[1]]|| {};
    result[new_keys[0]][new_keys[1]][new_keys[2]] = result[new_keys[0]][new_keys[1]][new_keys[2]] || [];
    result[new_keys[0]][new_keys[1]][new_keys[2]].push(data[the_key]);
}


console.log(result);

演示:http://jsfiddle.net/8ZbMt/

关于javascript - 将 key 分解为深层 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16457058/

相关文章:

javascript - 如何将文本添加到 JSON 的开头和结尾以使其成为 JSONP

javascript - 如何从数组中获取javascript中的列表

javascript - 无法获取引导工具提示来显示在 JS 中创建的图像

javascript - 如何在 Sequelize 中更新外键 (belongsTo)

Javascript 七段显示器不亮起或响应事件点击

javascript - 调用 URL 并获取返回值。 Jquery和Javascript都不显示返回值

javascript - React/Node 文件在 Safari 中上传失败

javascript - 如何将 div 元素放入 Canvas

javascript - 如何在 typescript 中将可选参数传递给回调函数

javascript - 垃圾收集器是否会从 NodeJS 内存中清除过时的所需模块?