Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于特定属性筛选对象数组_Javascript_Arrays_Angular_Typescript - Fatal编程技术网

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........}
{.......} ]