gpt4 book ai didi

javascript - 递归过滤对象数组

转载 作者:行者123 更新时间:2023-12-03 02:10:40 25 4
gpt4 key购买 nike

我有这些数据结构

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 中的数据构建自定义输出。

使用函数reducefind来使用此替代方案。

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; }

关于javascript - 递归过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com