gpt4 book ai didi

javascript - JavaScript 中的过滤器内部过滤器

转载 作者:行者123 更新时间:2023-11-28 12:11:35 26 4
gpt4 key购买 nike

我需要过滤另一个对象数组中包含的对象数组内的一些数据。这是我的数据的示例结构。我需要过滤类别

[
{
id: 540,
name:'Makeup kit'
slug:'makeup-kit',
status:'publish',
categories: [
{
id: 42, name:'Fashion',slug:'fashion'
},
{
id: 43, name:'Beauty',slug:'beauty'
}
]
},
{
id: 541,
name:'Silicon gloves'
slug:'silicon-gloves',
status:'publish',
categories: [
{
id: 44, name:'Health',slug:'health'
}
]
},
{
id: 650,
name:'Julep Mask'
slug:'julep-mask',
status:'publish',
categories: [
{
id: 43, name:'Beauty',slug:'beauty'
}
]
}
]

这是我正在尝试的方法

beautyProducts=temp1.filter(product=>product.categories.filter(cat=>cat.id===43))

但我的解决方案似乎不起作用。

最佳答案

Array#filter() 期望您提供给它的函数返回 true 或 false 值。函数返回真值的元素将保留在新数组中,而给出假值的元素将被删除。

您只想保留其中一个类别的 id 为 43 的元素。那么,使用第二个过滤器在这里没有任何意义:它返回一个数组,并且数组始终为真;因此,第一个过滤器将始终接收每个元素的数组,并且所有元素都保留在新数组中。

您应该使用 Array#some() 而不是第二个过滤器 - 您想知道是否有任何类别具有 id===43,并且如果没有一个这样做,那么您需要一个值,以便将产品从结果中排除。

简单的改变:

beautyProducts = temp1.filter(product => product.categories.some(cat => cat.id === 43))

这是一个工作示例:

let temp1 = [{id:540,name:'Makeup kit',slug:'makeup-kit',status:'publish',categories:[{id:42,name:'Fashion',slug:'fashion'},{id:43,name:'Beauty',slug:'beauty'}]},{id:541,name:'Silicon gloves',slug:'silicon-gloves',status:'publish',categories:[{id:44,name:'Health',slug:'health'}]},{id:650,name:'Julep Mask',slug:'julep-mask',status:'publish',categories:[{id:43,name:'Beauty',slug:'beauty'}]}];

let beautyProducts = temp1.filter(product => product.categories.some(cat => cat.id === 43));

console.log(beautyProducts);

关于javascript - JavaScript 中的过滤器内部过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60873899/

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