我有一个如下所示的多维数组:
[
{"primary":{"sub":{"ID":[]}}},
{"primary":{"sub":{"Name":[]}}},
{"primary":{"ID":[]}},
{"primary":{"Name":[]}}
]
我想获取独特的属性并将它们排序到具有以下结构的树中:
primary
sub
ID
Name
ID
Name
我尝试了很多事情,最新的是:
function multiDimensionalUnique(arr) {
var uniques = [];
var itemsFound = {};
for (var i = 0, l = arr.length; i < l; i++) {
var stringified = JSON.stringify(arr[i]);
if (itemsFound[stringified]) {
continue;
}
uniques.push(arr[i]);
itemsFound[stringified] = true;
}
return uniques;
}
uniqueCols = multiDimensionalUnique(arrayCols);
但这没有用。
我还研究了分组函数和reduce(我无法理解它),但到目前为止还没有解决它。
需要注意的是,属性都是动态的,结构可能非常复杂,我不知道我事先会得到什么数据,只是它会像上面的代码(非常简化) .
最佳答案
递归调用的函数dive()
可以完成这项工作,请参见此处:
var inp=[{"primary":{"sub":{"ID":[1,2,3]}}},
{"primary":{"sub":{"Name":[4,5,6]}}},
{"primary":{"ID":[7,8,9]}},
{"primary":{"Name":[5,5,5]}}];
var tree={};
function dive(tree,obj){
for (var p in obj) {
if (!tree[p]) tree[p]=obj[p];
else dive(tree[p],obj[p]);
}
}
inp.forEach((el)=>dive(tree,el));
console.log(tree);
我冒昧地用一些内容增强你的空数组。当然,它对于空数组也同样有效。
结果:
{
"primary": {
"sub": {
"ID": [
1,
2,
3
],
"Name": [
4,
5,
6
]
},
"ID": [
7,
8,
9
],
"Name": [
5,
5,
5
]
}
}
关于javascript - 将多维数组转换为树状结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51672243/