Javascript:将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": { "

我有一个简单的JSON数组结构

[
  [ "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