Javascript 过滤两个对象数组

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

我有两个数组,我想用另一个数组的值过滤一个数组。因此,我有一个cars数组,我想用filter数组的值对cars进行过滤。我的代码如下:

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帽子匹配两个过滤器?传输过滤器的意义是什么?不,它们在阵列中的位置没有意义?如果有更聪明的方法创建过滤器阵列,请说出来。;感谢所有的解释。感谢所有的解释。