根据特定属性过滤对象数组

时间:2018-05-01 08:37:06

标签: javascript arrays angular typescript

我有一系列显示的列:

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

和一组对象(从db中检索,其中包含的内容多于显示的列属性):

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

我在过滤data数组时遇到问题,只显示displayed columns属性及其值(没有其他属性)

当我想要使用多个值进行过滤时,

并不完全了解如何使用map()函数

非常感谢

2 个答案:

答案 0 :(得分:3)

您可以使用只有所需键的新对象映射数组。



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; }




答案 1 :(得分:1)

您可以获取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中不起作用,并且还将箭头功能更改为普通功能。