首页 > 解决方案 > 与第二个数组中的对象属性值相比,返回过滤后的数组

问题描述

我需要根据用户输入的内容动态更新 AngularJS 应用程序中的表。我有一个在视图updateCategory中调用的函数,应该在控制器中ng-change返回一个新数组。vm.portfolioData

提供el.serviceList了一个属性,serviceStatus它提供了一个字符串值,然后需要检查它是否包含在第二个数组的对象属性中,actionStatus

function updateCategory(obj, position) {
  vm.portfolioData = patents;
  vm.portfolioData = vm.portfolioData.filter(function(el){
     return el.serviceList.filter(function(item){
        //item.serviceStatus: "Epct available"
        //NEED TO RETURN EL IF STATUS IS CONTAINED IN SECOND ARRAY
     }
  })
}

第二个数组

actionStatus: [
   {name: 'Epct available'},
   {name: 'Epct saved'}, 
   {name: 'Form 1200 saved'}, 
   {name: 'Epct rejected'}, 
   {name: 'Show price'}, 
   {name: 'Open for Renewal'}, 
   {name: 'Form 1200 generating'}
 ]

问题

serviceStatus一旦我检查了值是否包含在第二个数组中的任何对象属性中,如何返回新的过滤name数组?

标签: javascriptarraysangularjs

解决方案


尝试这个:

const serviceList = [
    {serviceStatus: 'Epct available'},
    {serviceStatus: 'Epct not available'},
];

const actionStatus = [
    {name: 'Epct available'},
    {name: 'Epct saved'},
    {name: 'Form 1200 saved'},
    {name: 'Epct rejected'},
    {name: 'Show price'},
    {name: 'Open for Renewal'},
    {name: 'Form 1200 generating'}
];

const actionStatusStrings = actionStatus.map(item => item.name);

const filteredArray = serviceList.filter(item => {
    return actionStatusStrings.includes(item.serviceStatus);
});

关于你的情况:

function updateCategory(obj, position) {
  vm.portfolioData = patents;

  const actionStatusStrings = actionStatus.map(item => item.name);

  vm.portfolioData = vm.portfolioData.filter(el => {
    return el.serviceList.find(item => {
        return actionStatusStrings.includes(item.serviceStatus);
    });
  })
}

推荐阅读