Javascript:将JSON数组转换为级联JSON
我有一个简单的JSON数组结构Javascript:将JSON数组转换为级联JSON,javascript,json,Javascript,Json,我有一个简单的JSON数组结构 [ [ "1000", "Kangar","Perlis" ], [ "1532", "Kangar", "Perlis" ], [ "2000", "Kuala Perlis", "Perlis" ], [ "6250", "Alor Setar", "Kedah" ], [ "6300", "Kuala Nerang", "Kedah" ] ] 现在我想这样构造JSON { "Perlis": { "
[
[ "1000", "Kangar","Perlis" ],
[ "1532", "Kangar", "Perlis" ],
[ "2000", "Kuala Perlis", "Perlis" ],
[ "6250", "Alor Setar", "Kedah" ],
[ "6300", "Kuala Nerang", "Kedah" ]
]
现在我想这样构造JSON
{
"Perlis":
{
"Kangar": [ "1000", "1532" ],
"Kuala Perlis": [ "2000" ]
},
"Kedah":
{
"Alor Setar":["6250"],
"Kuala Nerang":["2000"]
}
}
那么,如何使用Javascript的对象实现这个结果呢?试试下面的方法
var-arr=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
];
var obj={};
arr.forEach(功能(项目){
obj[项目[2]]=obj[项目[2]]| |{};
obj[项目[2]][项目[1]]=obj[项目[2]][项目[1]].| |[];
obj[项目[2]][项目[1]]推送(项目[0]);
});
控制台日志(obj)代码>尝试以下操作
var-arr=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
];
var obj={};
arr.forEach(功能(项目){
obj[项目[2]]=obj[项目[2]]| |{};
obj[项目[2]][项目[1]]=obj[项目[2]][项目[1]].| |[];
obj[项目[2]][项目[1]]推送(项目[0]);
});
控制台日志(obj)
您可以使用reduce
创建如下哈希对象:
函数变换(arr){
返回arr.reduce(函数(hash,sub){
if(hash[sub[2]]){//如果我们对第一级分类(sub[2]]进行hash)
if(散列[sub[2]][sub[1]])/——如果我们散列了第二级类别(sub[1])
hash[sub[2]][sub[1]].push(sub[0]);//----将项(sub[0])添加到该数组中
否则
散列[sub[2]][sub[1]]=[sub[0]];//----创建最初包含当前项(sub[0])的二级类别占位符(新数组)
}
else{//else
hash[sub[2]={};//--创建第一级类别占位符
散列[sub[2]][sub[1]]=[sub[0]];/--创建最初包含当前项(sub[0])的第二级类别占位符(新数组)
}
返回散列;
}, {});
}
变量数组=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
];
log(转换(数组))
您可以使用reduce
创建如下哈希对象:
函数变换(arr){
返回arr.reduce(函数(hash,sub){
if(hash[sub[2]]){//如果我们对第一级分类(sub[2]]进行hash)
if(散列[sub[2]][sub[1]])/——如果我们散列了第二级类别(sub[1])
hash[sub[2]][sub[1]].push(sub[0]);//----将项(sub[0])添加到该数组中
否则
散列[sub[2]][sub[1]]=[sub[0]];//----创建最初包含当前项(sub[0])的二级类别占位符(新数组)
}
else{//else
hash[sub[2]={};//--创建第一级类别占位符
散列[sub[2]][sub[1]]=[sub[0]];/--创建最初包含当前项(sub[0])的第二级类别占位符(新数组)
}
返回散列;
}, {});
}
变量数组=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
];
log(转换(数组))代码>
var-inputArr=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
];
var processFunction=函数(arr){
var outputObj={};
arr.forEach(功能(要素){
如果(!outputObj[elem[2]])
outputObj[elem[2]]={};
如果(!outputObj[elem[2]][elem[1]])
outputObj[elem[2]][elem[1]]=[];
outputObj[elem[2]][elem[1]].push(elem[0]);
});
返回outputObj;
};
警报(JSON.stringify(processFunction(inputArr))代码>
var-inputArr=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
];
var processFunction=函数(arr){
var outputObj={};
arr.forEach(功能(要素){
如果(!outputObj[elem[2]])
outputObj[elem[2]]={};
如果(!outputObj[elem[2]][elem[1]])
outputObj[elem[2]][elem[1]]=[];
outputObj[elem[2]][elem[1]].push(elem[0]);
});
返回outputObj;
};
警报(JSON.stringify(processFunction(inputArr))代码>
var-arr=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
]
函数转换(arr){
返回arr.reduce(函数(o,e){
o[e[2]]=o[e[2]| |{};
o[e[2]][e[1]]=o[e[2]][e[1]]||[];
o[e[2][e[1]].推(e[0]);
返回o;
}, {});
}
console.log(convert(arr))代码>
var-arr=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
]
函数转换(arr){
返回arr.reduce(函数(o,e){
o[e[2]]=o[e[2]| |{};
o[e[2]][e[1]]=o[e[2]][e[1]]||[];
o[e[2][e[1]].推(e[0]);
返回o;
}, {});
}
console.log(convert(arr))代码>您可以使用reduce()
执行此操作
var数据=[
[“1000”、“Kangar”、“Perlis”],
[“1532”、“Kangar”、“Perlis”],
[“2000”、“Kuala Perlis”、“Perlis”],
[“6250”、“Alor Setar”、“Kedah”],
[“6300”、“瓜拉尼朗”、“凯达”]
]
var o={}
var结果=数据.reduce(函数(r,e){
如果(!o[e[1]])){
o[e[1]]={[e[1]]:[]}
r[e[2]]=Object.assign((r[e[2]]| |{}),o[e[1]]
}
o[e[1]][e[1]].推送(e[0])
返回r
}, {})
console.log(result)
您可以使用reduce()
var-dat