根据数组过滤对象数组

时间:2020-01-17 07:44:59

标签: typescript

我正在尝试过滤看起来像这样的一组对象

const ELEMENT_DATA: PeriodicElement[] = [
  { position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H' },
  { position: 2, name: 'Helium', weight: 4.0026, symbol: 'He' },
  { position: 3, name: 'Lithium', weight: 6.941, symbol: 'Li' },
  { position: 4, name: 'Beryllium', weight: 9.0122, symbol: 'Be' },
  { position: 5, name: 'Boron', weight: 10.811, symbol: 'B' }
];

还有一个看起来像这样的数组

const values = [1,5];

我需要过滤ELEMENT_DATANEW_VALUES像这样

const NEW_VALUES: PeriodicElement[] = [
  { position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H' },
  { position: 5, name: 'Boron', weight: 10.811, symbol: 'B' }
];

我尝试过使用这样的过滤器:

  filterData(locationName: any) {
    return ELEMENT_DATA.filter(object => {
      return object.position === locationName;
    });
  }

但是我总是得到一个空数组。

2 个答案:

答案 0 :(得分:2)

如果locationName作为输入[1,5],则代码应如下所示:

 filterData(locationName: number[]) {
    return ELEMENT_DATA.filter(object => {
      return locationName.includes(object.position);
    });
  }

答案 1 :(得分:0)

您可以使用Array.prototype.filter()

ELEMENT_DATA.filter(function (object) {
  return locationName.indexOf(object.position) !== -1; // -1 means not present
});

或使用下划线JS,使用相同的谓词:

_.filter(ELEMENT_DATA, function (object) {
  return locationName.indexOf(object.position) !== -1; // -1 means not present
}

如果您有权访问ES6集合或Set的polyfill。 在这里 locationName 应该是Set的类型

ELEMENT_DATA.filter(object=> locationName.has(object.position))