фильтровать массив объектов на основе указанных атрибутов - PullRequest
0 голосов
/ 01 мая 2018

У меня есть массив отображаемых столбцов:

displayedColumns = ['CompanyName','Ticker', 'Id', 'Name', 'Date', 
      'Spot', 'PreviousTradeDate', 'PreviousSpot', 'FPrice', 'Status']

и массив объектов (полученный из базы данных, который содержит больше, чем отображаемые атрибуты столбцов):

 data = [ {CompanyName = "..." Ticker = "..." other attributes........}
{.......} ]

У меня проблемы с фильтрацией массива data для отображения только атрибутов displayed columns и их значений (без других атрибутов)

не совсем понял, как это сделать с помощью функции map(), когда я хочу отфильтровать по более чем одному значению

большое спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вы можете получить ключи для каждого объекта в массиве data и проверить, существуют ли эти ключи в displayedColumns или нет. Ниже приведен пример того, как вы можете сделать это:

var displayedColumns = ['CompanyName','Ticker', 'Id', 'Name', 'Date', 
      'Spot', 'PreviousTradeDate', 'PreviousSpot', 'FPrice', 'Status'];
      
var data = [
    {
      'CompanyName': 'CompanyName1',
      'Ticker': 'Ticker1',
      'SomeRandomProperty': 'SomeRandomProperty1'
    },
    {
      'CompanyName': 'CompanyName2',
      'Ticker': 'Ticker2',
      'SomeRandomProperty': 'SomeRandomProperty2',
      'Name': 'Name1'
    },
    {
      'CompanyName': 'CompanyName3',
      'Ticker': 'Ticker3',
      'SomeRandomProperty': 'SomeRandomProperty3',
      'Name': 'Name3',
      'FPrice':'FPrice1',
      'testProperty': 'testProperty1'
    }
];
var finalObj = [];
data.forEach((obj)=>{
   var keys = Object.keys(obj);
   var innerObj = {};
   keys.forEach((key)=>{
     if(displayedColumns.indexOf(key) !== -1){
       innerObj[key] = obj[key];
     }
   });
   finalObj.push(innerObj);
});

console.log(finalObj);

Если вы также заинтересованы в том, чтобы этот код работал в браузере IE, не используйте includes(), так как он не работает в IE, а также измените функцию стрелки на обычные функции.

0 голосов
/ 01 мая 2018

Вы можете сопоставить массив с новым объектом только с требуемыми ключами.

var displayedColumns = ['CompanyName','Ticker', 'Id'],
    data = [{ CompanyName: 'ABC', Ticker: '123', Id: 1, x: 'foo' }, { CompanyName: 'ABD', Ticker: '124', Id: 2, x: 'bar' }];
    result = data.map(o => Object.assign(...displayedColumns.map(k => ({ [k]: o[k] }))));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...