根据对象数据对对象值数组进行分组
Group array of object values based on object data
下面有一个对象
var obj = [
{ name : ["a", "x", "1"] , d : [1,2,3] },
{ name : ["a", "x", "2"] , d : [1,2,3] },
{ name : ["a", "y", "3"] , d : [1,2,3] },
{ name : ["a", "y", "4"] , d : [1,2,3] },
{ name : ["a", "z", "5"] , d : [1,2,3] },
{ name : ["a", "z", "6"] , d : [1,2,3] },
{ name : ["b", "x", "7"] , d : [1,2,3] },
{ name : ["b", "x", "9"] , d : [1,2,3] }
];
以上name
数组长度可以是任意…我需要像
formatted = {
a : {
x : {
1 : [1,2,3],
2 : [1,2,3]
},
y : {
3 : [1,2,3],
4 : [1,2,3]
},
z : {
5 : [1,2,3],
6 : [1,2,3]
}
},
b : {
x : {
7 : [1,2,3],
8 : [1,2,3]
}
}
}
是否有算法可用于此。请帮我实现这个逻辑
试试
var formatted = {}, inner, i, j;
for(i = 0; i < obj.length; i++){
expand(formatted, obj[i].name, obj[i].d)
}
function expand(obj, array, value){
var key, temp;
if(array.length == 1){
obj[array.shift()] = value;
} else {
key = array.shift();
temp = obj[key] = obj[key] || {};
expand(temp, array, value)
}
}
演示:小提琴
这个函数已经解决了我的问题。谢谢Feliz Kling的建议
function setToValue(obj, value, path) {
var parent = obj;
for (var i = 0; i < path.length - 1; i += 1) {
parent[path[i]] = parent[path[i]] || {}
parent = parent[path[i]];
}
parent[path[path.length-1]] = value;
}
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序