Javascript JSON-将子child作为IF语句的条件
我有一个来自API的JSON,其中包含以下内容:Javascript JSON-将子child作为IF语句的条件,javascript,json,Javascript,Json,我有一个来自API的JSON,其中包含以下内容: "items":[ { id: *id here*, variant: { variant_name: *name here*, variant_id: *id here*, stores: { 0: store_id: *STOREID1*,
"items":[
{
id: *id here*,
variant: {
variant_name: *name here*,
variant_id: *id here*,
stores: {
0:
store_id: *STOREID1*,
available_for_sale: true
1:
store_id: *STOREID2*,
available_for_sale: true
}
}
}]
我想选择具有相同门店ID和可供销售状态的商品。我尝试过这个,但不起作用:
if(items.variant.stores.store_id === "STOREID1" && items.variant.stores.available_for_sale === 'true'){
但是它说
Uncaught TypeError: Cannot read property 'store_id' of undefined
编辑:
我试过这个:
if(items.variants.stores.store_id["******"] && items.variants.stores.available_for_sale['true']){
但它仍然给出了相同的错误
编辑2:
编辑问题以获得更多澄清。您的JSON文件格式不正确。我试着把它改成有效的。下次在console.log中获取对象,并使用
JSON.stringify(jsobject)
获得有效的JSON输出,而不是尝试逐字复制粘贴
还不完全清楚您是想要整个对象,还是只想要存储值。但我已经实现了两者
我使用了Object.values
,因为您的符号看起来像对象(这会使它成为无效的JSON),但如果它们确实是数组,则不需要Object.values
数据={
“项目”:[{
id:“*此处id*”,
变体:{
变量名称:“*此处的名称*”,
变量id:“*此处id*”,
商店:{
0: {
门店标识:“*STOREID1*”,
可供出售:真实
},
1: {
门店标识:“*STOREID2*”,
可供出售:真实
}
}
}
}]
}
//筛选并返回所有存储有问题的对象的整个对象
//使用一些来搜索至少一个匹配的存储值
console.log(
data.items.filter(item=>Object.values(item.variant.stores)(({
商店标识,
可供出售
})=>商店id=='*STOREID1*'&&U可供出售)
)
//获取存储值
//使用flatMap组合从每个stores对象返回的所有数组。
console.log(
data.items.flatMap(item=>Object.values(item.variant.stores).filter(({
商店标识,
可供出售
})=>商店id=='*STOREID1*'&&U可供出售)
)
您的JSON文件格式不正确。我试着把它改成有效的。下次在console.log中获取对象,并使用JSON.stringify(jsobject)
获得有效的JSON输出,而不是尝试逐字复制粘贴
还不完全清楚您是想要整个对象,还是只想要存储值。但我已经实现了两者
我使用了Object.values
,因为您的符号看起来像对象(这会使它成为无效的JSON),但如果它们确实是数组,则不需要Object.values
数据={
“项目”:[{
id:“*此处id*”,
变体:{
变量名称:“*此处的名称*”,
变量id:“*此处id*”,
商店:{
0: {
门店标识:“*STOREID1*”,
可供出售:真实
},
1: {
门店标识:“*STOREID2*”,
可供出售:真实
}
}
}
}]
}
//筛选并返回所有存储有问题的对象的整个对象
//使用一些来搜索至少一个匹配的存储值
console.log(
data.items.filter(item=>Object.values(item.variant.stores)(({
商店标识,
可供出售
})=>商店id=='*STOREID1*'&&U可供出售)
)
//获取存储值
//使用flatMap组合从每个stores对象返回的所有数组。
console.log(
data.items.flatMap(item=>Object.values(item.variant.stores).filter(({
商店标识,
可供出售
})=>商店id=='*STOREID1*'&&U可供出售)
)
项
是一个数组,需要对其进行迭代并筛选所需的项
const项=[{
id:1,
变体:{
变量名称:'*此处的名称*',
变体编号:111,
门店:{store_id:1111,可供出售:true}
}
},
{
id:2,
变体:{
变体名称:“此处的名称”,
变体编号:222,
门店:{store_id:2222,可供出售:true}
}
}
];
const result=items.filter({variant:v})=>(
v、 stores.store\u id==2222&&v.stores.available\u待售
));
控制台日志(结果)代码>
。由于控制台包装器{max height:100%!important;top:0;}
项
是一个数组,因此需要对其进行迭代并筛选所需的项
const项=[{
id:1,
变体:{
变量名称:'*此处的名称*',
变体编号:111,
门店:{store_id:1111,可供出售:true}
}
},
{
id:2,
变体:{
变体名称:“此处的名称”,
变体编号:222,
门店:{store_id:2222,可供出售:true}
}
}
];
const result=items.filter({variant:v})=>(
v、 stores.store\u id==2222&&v.stores.available\u待售
));
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您是指具有特定存储id和状态的项目吗?或者只是一般的分组?请澄清问题对不起,我说的是特定的商店ID和状态。你必须在项目中迭代数组,并根据你想要的项目筛选出它们。仅检查一个值是不够的您是指具有特定门店id和状态的商品吗?或者只是一般的分组?请澄清问题对不起,我说的是特定的商店ID和状态。你必须在项目中迭代数组,并根据你想要的项目筛选出它们。仅仅检查一个值是不够的,非常感谢!如果JSON格式不正确,我很抱歉,它太长了,我不想发布它,因为它可能看起来很凌乱。非常感谢!如果JSON格式不正确,我很抱歉,它太长了,我不想发布它,因为它可能看起来很凌乱。