Javascript 按KeyName查找JSON数组对象值

Javascript 按KeyName查找JSON数组对象值,javascript,json,Javascript,Json,在下面的例子中,我正在寻找Javascript for JSON的HashMap类实现 我有以下结构的JSON: { "level1": { "level2": [{ "product1": [ "item1", "item2" ] }, { "product2": [ "item1", "item2" ] },

在下面的例子中,我正在寻找Javascript for JSON的HashMap类实现

我有以下结构的JSON:

{
"level1": {
    "level2": [{
        "product1": [
            "item1",
            "item2"
        ]
    }, {
        "product2": [
            "item1",
            "item2"
        ]
    }, {
        "product3": [
            "item5",
            "item6"
        ]
    }]
}
}

对于我的用例,我得到一个值,比如'product3',我想找到这个键的值,即“item5”,“item6”。我有一种方法,可以循环遍历整个level2对象,但我想知道是否可以简单地使用key来查找值

您可以自己构建一个对象或(在ES2015中)一个
地图

下面是一个使用对象的ES5示例:

var map = Object.create(null);
data.level1.level2.forEach(function(entry) {
    Object.keys(entry).forEach(function(key) {
        map[key] = entry;
    });
});
实例:

var数据={
“一级”:{
“二级”:[{
“产品1”:[
“项目1”,
“项目2”
]
}, {
“产品2”:[
“项目1”,
“项目2”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}
};
var map=Object.create(空);
data.level1.level2.forEach(函数(条目){
Object.keys(entry.forEach)函数(key){
映射[键]=条目;
});
});
var name=“product2”;

console.log(映射[名称])您可以自己构建一个对象或(在ES2015中)一个
地图

下面是一个使用对象的ES5示例:

var map = Object.create(null);
data.level1.level2.forEach(function(entry) {
    Object.keys(entry).forEach(function(key) {
        map[key] = entry;
    });
});
实例:

var数据={
“一级”:{
“二级”:[{
“产品1”:[
“项目1”,
“项目2”
]
}, {
“产品2”:[
“项目1”,
“项目2”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}
};
var map=Object.create(空);
data.level1.level2.forEach(函数(条目){
Object.keys(entry.forEach)函数(key){
映射[键]=条目;
});
});
var name=“product2”;

console.log(映射[名称])您可以将数据转换为不同的结构

const数据={
“一级”:{
“二级”:[{
“产品1”:[
“项目1”,
“项目2”
]
}, {
“产品2”:[
“项目3”,
“项目4”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}, 
“1B级”:{
“二级”:[{
“产品1”:[
“项目1B”,
“项目2”
]
}, {
“产品2”:[
“项目3”,
“项目4”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}
};
常量转换=对象
.钥匙(数据)
.reduce((对象,键)=>{
常量值=数据[键];
返回Object.assign(obj,{[key]:transformLvl2(value)});
}, {});
console.log(transformed.level1.level2.product2);
console.log(transformed.level1.level2.product1);
console.log(transformed.level1.level2.product3);
console.log(转换为.level1b.level2.product1);
功能转换LVL2(级别2){
返回对象
.钥匙(二级)
.reduce((对象,键)=>{
常量值=level2[键];
返回Object.assign(obj,{[key]:transformLvl3(value)});
}, {});
}
功能转换Lvl3(三级){
返回级别3
.减少((对象,值)=>{
返回Object.assign(对象,值);
}, {});

}
您可以将数据转换为不同的结构

const数据={
“一级”:{
“二级”:[{
“产品1”:[
“项目1”,
“项目2”
]
}, {
“产品2”:[
“项目3”,
“项目4”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}, 
“1B级”:{
“二级”:[{
“产品1”:[
“项目1B”,
“项目2”
]
}, {
“产品2”:[
“项目3”,
“项目4”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}
};
常量转换=对象
.钥匙(数据)
.reduce((对象,键)=>{
常量值=数据[键];
返回Object.assign(obj,{[key]:transformLvl2(value)});
}, {});
console.log(transformed.level1.level2.product2);
console.log(transformed.level1.level2.product1);
console.log(transformed.level1.level2.product3);
console.log(转换为.level1b.level2.product1);
功能转换LVL2(级别2){
返回对象
.钥匙(二级)
.reduce((对象,键)=>{
常量值=level2[键];
返回Object.assign(obj,{[key]:transformLvl3(value)});
}, {});
}
功能转换Lvl3(三级){
返回级别3
.减少((对象,值)=>{
返回Object.assign(对象,值);
}, {});
}
尝试(假设
level1
level2
是通用的)

var obj={
“一级”:{
“二级”:[{
“产品1”:[
“项目1”,
“项目2”
]
}, {
“产品2”:[
“项目1”,
“项目2”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}
};
var keyName=“product3”;
var项目=[];
Object.keys(obj).forEach(函数(key){
Object.keys(obj[key]).forEach(函数(key1){
obj[key][key1].forEach(函数(obj1){
Object.keys(obj1).forEach(函数(key2){
if(key2==keyName){
items=items.concat(obj1[key2]);
}
});
});
});
});
控制台日志(项目)尝试(假设
level1
level2
是通用的)

var obj={
“一级”:{
“二级”:[{
“产品1”:[
“项目1”,
“项目2”
]
}, {
“产品2”:[
“项目1”,
“项目2”
]
}, {
“产品3”:[
“项目5”,
“项目6”
]
}]
}
};
var keyName=“product3”;
var项目=[];
Object.keys(obj).forEach(函数(key){
Object.keys(obj[key]).forEach(函数(key1){
obj[key][key1].forEach(函数(obj1){
Object.keys(obj1).forEach(函数(key2){
if(key2==keyName){
items=items.concat(obj1[key2]);
}
});
});
});
});
控制台日志(项目)
使用
Array的“一行”优化解决方案。一些
Array.inde