我有这些数据结构
products:[
{
products_number: 14,
products_ID: 'lvs_jeans-man',
products_seller: 'a',
products_SKU: [
{
productSKU_ID: 'nfl_lvs_jeans-man_xl_bl-stripe',
productSKU_size: 'XL',
productSKU_color: 'Blue_White'
},
{
productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
productSKU_size: 'XL',
productSKU_color: 'Black'
}
]
},
{
products_number: 15,
products_ID: 'lvs_jeans-man',
products_seller: 'b',
products_SKU: [
{
productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
productSKU_size: 'XL',
productSKU_color: 'Black'
}
]
},
{
products_number: 16,
products_ID: 'lvs_jeans-man',
products_seller: 'c',
products_SKU: [
{
productSKU_ID: 'nfl_lvs_jeans-man_xl_gy',
productSKU_size: 'XL',
productSKU_color: 'Grey',
}
]
}
]
常数
var id = 'lvs_jeans-man'
var size = 'XL'
var color = 'Black'
如何过滤满足这些条件的项目
products_ID == id
productSKU_color == color
productSKU_size == size
所需的输出是
[{
products_number: 14,
products_ID: 'lvs_jeans-man',
products_seller: 'a',
productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
},
{
products_number: 15,
products_ID: 'lvs_jeans-man',
products_seller: 'b',
productSKU_ID: 'nfl_lvs_jeans-man_xl_bk',
}]
我尝试过的是先过滤products_ID,然后过滤颜色和大小,以便我可以将productSKU_ID放入内部,然后随便进行数组推送,但返回
Cannot read property 'filter' of undefined"
var temp1 = this.products.filter((product => product.products_ID === this.id).products_SKU.filter(sku => (sku.productSKU_color === this.color && sku.productSKU_size === this.size)))
如何实现所需的输出?
最佳答案
函数过滤器不合适,因为您需要使用数组.products_SKU
中的数据构建自定义输出。
通过功能reduce
和find
使用此替代方法。
var data = { products: [{ products_number: 14, products_ID: 'lvs_jeans-man', products_seller: 'a', products_SKU: [{ productSKU_ID: 'nfl_lvs_jeans-man_xl_bl-stripe', productSKU_size: 'XL', productSKU_color: 'Blue_White' }, { productSKU_ID: 'nfl_lvs_jeans-man_xl_bk', productSKU_size: 'XL', productSKU_color: 'Black' } ] }, { products_number: 15, products_ID: 'lvs_jeans-man', products_seller: 'b', products_SKU: [{ productSKU_ID: 'nfl_lvs_jeans-man_xl_bk', productSKU_size: 'XL', productSKU_color: 'Black' }] }, { products_number: 16, products_ID: 'lvs_jeans-man', products_seller: 'c', products_SKU: [{ productSKU_ID: 'nfl_lvs_jeans-man_xl_gy', productSKU_size: 'XL', productSKU_color: 'Grey', }] } ]};
var id = 'lvs_jeans-man'
var size = 'XL'
var color = 'Black'
var result = data.products.reduce((a, p) => {
var found;
if (p.products_ID == id && (found = p.products_SKU.find(s => s.productSKU_size === size && s.productSKU_color === color))) {
a.push({
products_number: p.products_number,
products_ID: p.products_ID,
products_seller: p.products_seller,
productSKU_ID: found.productSKU_ID
});
}
return a;
}, []);
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }