我想遍历以下数组,并分解为对象,来自:
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);
关于javascript - 将 key 分解为深层 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16457058/