Javascript 子对象必须匹配所有条件的对象的筛选器数组

Javascript 子对象必须匹配所有条件的对象的筛选器数组,javascript,arrays,object,Javascript,Arrays,Object,我需要通过一个包含嵌入对象数组的对象数组进行解析,我知道我可以使用.filter()进行解析。但是,我需要检查嵌入的数组是否至少具有多种类型对象中的一种。见下例: 我有一个车库对象数组,其中有一个“cars”字段,它是一个cars数组。每辆车都是一个具有各种品质的物体。我需要看看哪个车库至少有一辆“快”车和一辆“小”车。如果两种质量属于同一辆车,则可以。用javascript实现这一点的最快/最有效的方法是什么 garageArray = [ { id: 10, cars: [

我需要通过一个包含嵌入对象数组的对象数组进行解析,我知道我可以使用.filter()进行解析。但是,我需要检查嵌入的数组是否至少具有多种类型对象中的一种。见下例:

我有一个车库对象数组,其中有一个“cars”字段,它是一个cars数组。每辆车都是一个具有各种品质的物体。我需要看看哪个车库至少有一辆“快”车和一辆“小”车。如果两种质量属于同一辆车,则可以。用javascript实现这一点的最快/最有效的方法是什么

garageArray = [
 {
  id: 10,
  cars: [
   {id: 1, qualities: ["fast", "small"]},
   {id: 2, qualities: ["offRoad", "large"]},
   {id: 3, qualities: ["fast", "loud"]}
  ]
 },
 {
  id: 20,
  cars: [
   {id: 4, qualities: ["loud"]},
   {id: 5, qualities: ["fast", "tiny"]}
  ]
 },
 {
  id: 30,
  cars: [
   {id: 6, qualities: ["slow", "small"]},
   {id: 7, qualities: ["offRoad", "tiny"]},
   {id: 8, qualities: ["fast", "loud"]}
  ]
 }
]
结果应该是ID为20和30的车库。

这应该可以做到:

garageArray.filter(garage =>
    garage.cars.some(car => car.qualities.includes("fast")) &&
    garage.cars.some(car => car.qualities.includes("tiny"))
);
但匹配n个属性的更一般的解决方案如下:

const garageArray=[
{
id:10,
汽车:[
{id:1,质量:[“快”,“小”]},
{id:2,质量:[“越野”、“大型”]},
{id:3,质量:[“快”,“大声”]}
]
},
{
身份证号码:20,
汽车:[
{id:4,质量:[“大声”]},
{id:5,质量:[“快”,“小”]}
]
},
{
id:30,
汽车:[
{id:6,质量:[“慢”,“小”]},
{id:7,质量:[“越野”,“微型”]},
{id:8,质量:[“快”,“大声”]}
]
}
];
var featuresTofind=[“响亮”、“快速”、“微小”];
var result=garageArray.filter(函数(车库){
var featuresFound=featuresTofind.filter(函数(特征)){
返回车库。汽车。一些(功能(汽车){
返回车。质量。包括(特征);
});
});
返回featuresFound.length==featuresTofind.length;
});
控制台日志(结果)这应该可以做到:

garageArray.filter(garage =>
    garage.cars.some(car => car.qualities.includes("fast")) &&
    garage.cars.some(car => car.qualities.includes("tiny"))
);
但匹配n个属性的更一般的解决方案如下:

const garageArray=[
{
id:10,
汽车:[
{id:1,质量:[“快”,“小”]},
{id:2,质量:[“越野”、“大型”]},
{id:3,质量:[“快”,“大声”]}
]
},
{
身份证号码:20,
汽车:[
{id:4,质量:[“大声”]},
{id:5,质量:[“快”,“小”]}
]
},
{
id:30,
汽车:[
{id:6,质量:[“慢”,“小”]},
{id:7,质量:[“越野”,“微型”]},
{id:8,质量:[“快”,“大声”]}
]
}
];
var featuresTofind=[“响亮”、“快速”、“微小”];
var result=garageArray.filter(函数(车库){
var featuresFound=featuresTofind.filter(函数(特征)){
返回车库。汽车。一些(功能(汽车){
返回车。质量。包括(特征);
});
});
返回featuresFound.length==featuresTofind.length;
});

控制台日志(结果)缺点是车辆循环两次:-)希望没问题

garageArray.filter(garage => {
    return garage.cars.some(car => {
        return car.qualities.includes("fast")
    }) && garage.cars.some(car => {
        return car.qualities.includes("tiny")
    });
})

缺点是车辆循环两次:-)希望没问题

garageArray.filter(garage => {
    return garage.cars.some(car => {
        return car.qualities.includes("fast")
    }) && garage.cars.some(car => {
        return car.qualities.includes("tiny")
    });
})

这是一个很好的解决方案。我会使用
.includes(“fast”)
而不是
.indexOf(“fast”)>=0
我太老了,不适合这样做。这是一个很好的解决方案。我会使用
.includes(“fast”)
而不是
.indexOf(“fast”)>=0
我年纪太大了,不适合这样做。