Javascript 基于特定属性筛选对象数组
我有一个显示列的数组:Javascript 基于特定属性筛选对象数组,javascript,arrays,angular,typescript,Javascript,Arrays,Angular,Typescript,我有一个显示列的数组: displayedColumns = ['CompanyName','Ticker', 'Id', 'Name', 'Date', 'Spot', 'PreviousTradeDate', 'PreviousSpot', 'FPrice', 'Status'] 以及一个对象数组(从数据库中检索,其中包含多个显示的列属性): 我无法过滤数据数组以仅显示显示的列属性及其值(不显示其他属性) 当我想按多个值进行筛选时,我不太明白如何使用map()函数 非常感谢您
displayedColumns = ['CompanyName','Ticker', 'Id', 'Name', 'Date',
'Spot', 'PreviousTradeDate', 'PreviousSpot', 'FPrice', 'Status']
以及一个对象数组(从数据库中检索,其中包含多个显示的列属性):
我无法过滤数据
数组以仅显示显示的列
属性及其值(不显示其他属性)
当我想按多个值进行筛选时,我不太明白如何使用map()
函数
非常感谢您可以使用新对象映射阵列,只需使用所需的键即可
var displayedColumns=['CompanyName','Ticker','Id'],
数据=[{CompanyName:'ABC',Ticker:'123',Id:1,x:'foo'},{CompanyName:'ABD',Ticker:'124',Id:2,x:'bar'}];
结果=data.map(o=>Object.assign(…displayedColumns.map(k=>({[k]:o[k]}));
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以获取数据数组中每个对象的键,并检查这些键是否存在于显示列中。下面是如何执行此操作的图示:
var displayedColumns=['CompanyName','Ticker','Id','Name','Date',',
'现货'、'上一交易日期'、'上一现货'、'价格'、'状态'];
风险值数据=[
{
“CompanyName”:“CompanyName1”,
“Ticker”:“Ticker1”,
“SomeRandomProperty”:“SomeRandomProperty1”
},
{
“公司名称”:“公司名称2”,
“Ticker”:“Ticker2”,
“SomeRandomProperty”:“SomeRandomProperty2”,
“名称”:“名称1”
},
{
“CompanyName”:“CompanyName3”,
“Ticker”:“Ticker3”,
“SomeRandomProperty”:“SomeRandomProperty3”,
“名称”:“名称3”,
“FPrice”:“FPrice1”,
“testProperty”:“testProperty1”
}
];
var finalObj=[];
data.forEach((obj)=>{
var keys=Object.keys(obj);
var innernobj={};
key.forEach((key)=>{
if(displayedColumns.indexOf(key)!=-1){
innerObj[key]=对象[key];
}
});
finalObj.推(innerObj);
});
console.log(finalObj)代码>澄清-您希望迭代数据中的每个对象,并过滤掉显示列中未列出的任何键
?基本上是,但我希望找到一个解决方案,不包括关于不在数据对象中的所需属性的循环?这将为数据中不存在的键提供未定义的值。假设data
数组中的对象没有Ticker
属性,那么它将设置该属性并将其值设置为undefined
@AnkitAgarwal,我认为op需要属性的子集。op想要从数据中删除无关的属性,如果显示列数组中没有所有属性,那么上面的代码将结果数组中的这些属性设置为未定义@NinaScholz非常感谢,但对于某些情况,这将返回一个空数组reason@Jonathan,请在问题中添加一些数据。
data = [ {CompanyName = "..." Ticker = "..." other attributes........}
{.......} ]