在React中基于字典过滤对象数组

时间:2018-03-07 15:13:32

标签: javascript

我是UI新手。我知道如何做这个c#。我的代码中有一个名为CarValues的字典,其中包含以下数据:

dictionary: CarValues

key ==> string

Value ==> Array

1. key => Honda,
   Value => white, yellow
2. Key => Volkswagen 
   Value => 123, 456
3. key => Mercedes
   Value => E, A, B

我还有一个包含以下对象的数组

汽车对象:

Cars = [
{
  Toyota: White
  Mercedes: B
  Honda: Red
  Volkswagen: 456
},
{
  Toyota: Green
  Mercedes: Z
  Honda: Blue
  Volkswagen: 234
},
{
  Toyota: Black
  Mercedes: A
  Honda: Yellow
  Volkswagen: 789
},
{
  Toyota: White
  Mercedes: B
  Honda: Red
  Volkswagen: 456
},
{
  Toyota: Green
  Mercedes: Z
  Honda: Blue
  Volkswagen: 234
},
{
  Toyota: Grey
  Mercedes: M
  Honda: Orange
  Volkswagen: 394
}
.............
.............
]

我想过滤掉与汽车价值相匹配的汽车中的物品。 迭代汽车键,查看汽车价值中是否存在值。

The output should be something like below:

{
  Toyota: White
  Mercedes: B
  Honda: Red
  Volkswagen: 456
},
{
  Toyota: Black
  Mercedes: A
  Honda: Yellow
  Volkswagen: 789
}

我正在做类似

的事情
    var copyCars= [];

    Object.entries(this.state.carValues).forEach(function (key) {
        Object.entries(this.state.carValues[key]).forEach(function (value) {
            var filterData = this.state.cars.filter(x => x[key] == value);
            copyCars.push(filterData);
        })            
    });

但是我现在在这条线上遇到错误,说这是未定义的。     var filterData = this.state.cars.filter(x => x [key] == value);

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您希望如何过滤阵列。但我认为您可以使用Array.filter功能。 MSDN (Array.filter)

示例:

/* let's assume, that you want to filter cars with 'Volkswagen' value to be in [456, 789];*/    

const volkswagenIds = [456, 789];
let filteredCars = Cars.filter(car => {
    return volkswagenIds.indexOf(car.Volkswagen) !== -1;
});