【发布时间】:2019-06-27 04:49:23
【问题描述】:
我有一个这样的 json 对象:
{
"products": [
{
"ID": "001",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Color",
"identifier": "Green"
},
{
"value": "Size",
"identifier": "L"
}
],
"SKUs": [
{
"ID": "001_1",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Color",
"identifier": "Green"
},
{
"value": "Size",
"identifier": "L"
}
]
},
{
"ID": "001_2",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Color",
"identifier": "Yellow"
},
{
"value": "Size",
"identifier": "M"
}
]
}
]
},
{
"ID": "002",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Size",
"identifier": "L"
}
],
"SKUs": [
{
"ID": "002_1",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Color",
"identifier": "Black"
},
{
"value": "Size",
"identifier": "L"
}
]
},
{
"ID": "002_2",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Color",
"identifier": "Grey"
}
]
}
]
},
{
"ID": "003",
"Attributes": [
{
"value": "BESTSELLERS",
"identifier": "BEST_SELLER"
},
{
"value": "Color",
"identifier": "Blue"
}
],
"SKUs": []
}
]
}')
如您所见,products 是一个数组,其中包含另一个数组 SKUs,其中包含另一个数组 Attributes。
我想获取所有具有 BOTH 属性的 SKU - Size 和 Color。
所以,它应该返回
SKUs 001_1, 001_2 and 002_1
所以,我写了以下代码:
var obj = JSON.parse('<MyAboveJSONObjectHere>');
obj.products.filter( p => p.SKUs.filter(sku => sku.Attributes.filter(att =>
att.identifier === 'Color' && att.identifier === 'Size')))
但这会返回
JSON内的所有3产品对象。
你能告诉我的代码表达式有什么问题吗?
【问题讨论】:
-
att.identifier === 'Color' && att.identifier === 'Size'一个属性不能同时保存两个不同的值 -
试试
att.identifier === 'Color' || att.identifier === 'Size' -
因为你的结构看起来很标准,你可以访问
1和2索引来检查color and size是否可用 -
不就是 att.value=='Color' && att.value=='Size' 吗?
标签: javascript arrays json filter