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