Javascript 过滤两个对象数组
我有两个数组,我想用另一个数组的值过滤一个数组。因此,我有一个cars数组,我想用filter数组的值对cars进行过滤。我的代码如下:Javascript 过滤两个对象数组,javascript,arrays,Javascript,Arrays,我有两个数组,我想用另一个数组的值过滤一个数组。因此,我有一个cars数组,我想用filter数组的值对cars进行过滤。我的代码如下: let cars = [ {name: "Audi", price: "1000", transmission: "Manual"}, {name: "Golf", price: "2000", transmission: "Manual"}, {name: "Passat", price: "3000", transmission: "Autom
let cars = [
{name: "Audi", price: "1000", transmission: "Manual"},
{name: "Golf", price: "2000", transmission: "Manual"},
{name: "Passat", price: "3000", transmission: "Automatic"},
{name: "Seat", price: "4000", transmission: "Manual"}
];
let filters = [
{searchFilter : ["price", 2000, 3000]},
{searchFilter : ["transmission", "", "automatic"]},
];
let carsToShow = "";
let result = cars.filter ( c => {
let carsToShow = "";
return filters.filter( f => {
if(f.searchFilter[0] === "price"){
carsToShow = c.price >= f.searchFilter[1] && c.price <= f.searchFilter[2]
}
if(f.searchFilter[0] === "transmission"){
if(f.searchFilter[1] !== ""){
carsToShow = c.transmission.toLowerCase() === "manual"
}
if(f.searchFilter[2] !== ""){
carsToShow = c.transmission.toLowerCase() === "automatic"
}
}
return carsToShow;
})
})
console.log(result);
在这种情况下,结果应该是{name:Passat,price:3000,transmission:Automatic}。但它不起作用
有什么建议吗?对于每个搜索条件,您都可以使用
var cars=[{名称:奥迪,价格:1000,变速器:手动},{名称:高尔夫,价格:2000,变速器:手动},{名称:帕萨特,价格:3000,变速器:自动},{名称:座椅,价格:4000,变速器:手动}],
filters=[{searchFilter:[price,20003000]},{searchFilter:[transmission,automatic]},
结果=cars.filterc=>
filters.everyf=>{
如果f.searchFilter[0]==价格{
对于每个搜索条件,返回可以使用的c.price>=f.searchFilter[1]&&c.price
var cars=[{名称:奥迪,价格:1000,变速器:手动},{名称:高尔夫,价格:2000,变速器:手动},{名称:帕萨特,价格:3000,变速器:自动},{名称:座椅,价格:4000,变速器:手动}],
filters=[{searchFilter:[price,20003000]},{searchFilter:[transmission,automatic]},
结果=cars.filterc=>
filters.everyf=>{
如果f.searchFilter[0]==价格{
return c.price>=f.searchFilter[1]&&c.price我要做的第一件事是构造过滤器中的条目,这样数组的[0]条目就不特殊了:
let filters = [
{filter: "price", values: [2000, 3000]},
{filter: "transmission", values: ["", "automatic"]},
];
理想情况下,数据在使用数字或字符串作为价格方面是一致的,而不是在一个地方使用数字,在另一个地方使用字符串,但我将假设这是一个设计约束
然后就是剔除任何过滤器不匹配的条目:因此,对于每辆车,我们使用过滤器。有些人会找到不匹配的过滤器条目:
let result = cars.filter(c => !filters.some(f => {
let value = c[f.filter].toLowerCase();
return f.values.findIndex(v => v == value) == -1;
}));
实时复制:
出租汽车=[
{名称:奥迪,价格:1000,变速器:手动},
{名称:高尔夫,价格:2000,变速器:手动},
{名称:帕萨特,价格:3000,变速箱:自动},
{名称:座椅,价格:4000,变速器:手动}
];
让过滤器=[
{过滤器:价格,值:[2000,3000]},
{筛选器:传输,值:[,自动]},
];
//让carsToShow=;我要做的第一件事是构造过滤器中的条目,这样数组的[0]条目就不特殊了:
let filters = [
{filter: "price", values: [2000, 3000]},
{filter: "transmission", values: ["", "automatic"]},
];
理想情况下,数据在使用数字或字符串作为价格方面是一致的,而不是在一个地方使用数字,在另一个地方使用字符串,但我将假设这是一个设计约束
然后就是剔除任何过滤器不匹配的条目:因此,对于每辆车,我们使用过滤器。有些人会找到不匹配的过滤器条目:
let result = cars.filter(c => !filters.some(f => {
let value = c[f.filter].toLowerCase();
return f.values.findIndex(v => v == value) == -1;
}));
实时复制:
出租汽车=[
{名称:奥迪,价格:1000,变速器:手动},
{名称:高尔夫,价格:2000,变速器:手动},
{名称:帕萨特,价格:3000,变速箱:自动},
{名称:座椅,价格:4000,变速器:手动}
];
让过滤器=[
{过滤器:价格,值:[2000,3000]},
{筛选器:传输,值:[,自动]},
];
//让carsToShow=;但是如果需要获取多个数据
<script>
"use strict"
let cars = [
{name: "Audi", price: "1000", transmission: "Manual"},
{name: "Golf", price: "2000", transmission: "Manual"},
{name: "Passat", price: "3000", transmission: "Automatic"},
{name: "Passat", price: "2500", transmission: "Automatic"},
{name: "Seat", price: "4000", transmission: "Manual"}
];
let filters = [
{searchFilter : ["price", 2000, 3000]},
{searchFilter : ["transmission", "", "automatic"]},
];
let result = cars.filter ( c => {
let carsToShow=false;
let carsToShowtran = false;
let carsToShowPrice = false;
let re= filters.filter( f => {
if(f.searchFilter[0] === "price"){
carsToShowPrice = c.price >= f.searchFilter[1] && c.price <= f.searchFilter[2]
}
if(f.searchFilter[0] === "transmission"){
if(f.searchFilter[1] !== ""){
carsToShowtran = c.transmission.toLowerCase() === "manual"
}
if(f.searchFilter[2] !== ""){
carsToShowtran = c.transmission.toLowerCase() === "automatic"
}
}
if(carsToShowtran && carsToShowPrice){
carsToShow=true;
}
return carsToShow;
})
if(re.length!=0){
return true;
}
})
console.log(result);
</script>
但是如果你需要得到不止一个的数据
<script>
"use strict"
let cars = [
{name: "Audi", price: "1000", transmission: "Manual"},
{name: "Golf", price: "2000", transmission: "Manual"},
{name: "Passat", price: "3000", transmission: "Automatic"},
{name: "Passat", price: "2500", transmission: "Automatic"},
{name: "Seat", price: "4000", transmission: "Manual"}
];
let filters = [
{searchFilter : ["price", 2000, 3000]},
{searchFilter : ["transmission", "", "automatic"]},
];
let result = cars.filter ( c => {
let carsToShow=false;
let carsToShowtran = false;
let carsToShowPrice = false;
let re= filters.filter( f => {
if(f.searchFilter[0] === "price"){
carsToShowPrice = c.price >= f.searchFilter[1] && c.price <= f.searchFilter[2]
}
if(f.searchFilter[0] === "transmission"){
if(f.searchFilter[1] !== ""){
carsToShowtran = c.transmission.toLowerCase() === "manual"
}
if(f.searchFilter[2] !== ""){
carsToShowtran = c.transmission.toLowerCase() === "automatic"
}
}
if(carsToShowtran && carsToShowPrice){
carsToShow=true;
}
return carsToShow;
})
if(re.length!=0){
return true;
}
})
console.log(result);
</script>
我的代码是这样的?那么它到底是什么?过滤器应该如何应用?它们在数组中的位置是否有意义?例如,3000和automatic都位于索引2?或者只是匹配两个过滤器的条目?传输过滤器的意义是什么?不,没有意义它们在数组中的位置有多重要?如果有更聪明的方法来创建过滤器数组,请说出来。。我的代码是这样的?那么它到底是什么?过滤器应该如何应用?它们在数组中的位置是否有意义?例如,3000和automatic都在索引2处?还是仅仅是条目t帽子匹配两个过滤器?传输过滤器的意义是什么?不,它们在阵列中的位置没有意义?如果有更聪明的方法创建过滤器阵列,请说出来。;感谢所有的解释。感谢所有的解释。