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