我有一系列显示的列:
displayedColumns = ['CompanyName','Ticker', 'Id', 'Name', 'Date',
'Spot', 'PreviousTradeDate', 'PreviousSpot', 'FPrice', 'Status']
和一组对象(从db中检索,其中包含的内容多于显示的列属性):
data = [ {CompanyName = "..." Ticker = "..." other attributes........}
{.......} ]
我在过滤data
数组时遇到问题,只显示displayed columns
属性及其值(没有其他属性)
并不完全了解如何使用map()
函数
非常感谢
答案 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中不起作用,并且还将箭头功能更改为普通功能。