首页 > 解决方案 > 具有多个条件的Javascript过滤器数组whitin数组

问题描述

这是我从服务器得到的结果。

arrays= 
      [ 0: 
        { Id: 1
        , name: 'test1'
        , parameters: 
          [ { name: 'application_instance', value: 'home',              type: 'generic' } 
          , { name: 'application_name',     value: 'initial',           type: 'generic' } 
          , { name: 'application_role',     value: 'disk_init_role',    type: 'generic' } 
          , { name: 'customer_environment', value: 'development',       type: 'generic' } 
          , { name: 'customer_name',        value: 'guest',             type: 'generic' } 
        ] } 
      , 1: 
        { Id: 2
        , name: 'test2'
        , parameters: 
          [ { name: 'application_instance', value: 'home',              type: 'generic' } 
          , { name: 'application_name',     value: 'disk_init',         type: 'generic' } 
          , { name: 'application_role',     value: 'initial',           type: 'generic' } 
          , { name: 'customer_environment', value: 'development',       type: 'generic' } 
          , { name: 'customer_name',        value: 'guest',             type: 'generic' } 
        ] } 
      , 2:
        { Id: 3
        , name: 'test3'
        , parameters: 
          [ { name: 'application_instance', value: 'home',              type: 'generic' } 
          , { name: 'application_name',     value: 'initial',           type: 'generic' } 
          , { name: 'application_role',     value: 'initial',           type: 'generic' } 
          , { name: 'customer_environment', value: 'development',       type: 'generic' } 
          , { name: 'customer_name',        value: 'guest',             type: 'generic' } 
        ] } 
      , 3: 
        { Id: 4
        , name: 'test4'
        , parameters: 
          [ { name: 'application_instance', value: 'home',              type: 'generic' } 
          , { name: 'application_name',     value: 'initial',           type: 'generic' } 
          , { name: 'application_role',     value: 'disk_init_role',    type: 'generic' } 
          , { name: 'customer_environment', value: 'development',       type: 'generic' } 
          , { name: 'customer_name',        value: 'guest',             type: 'generic' } 
        ] } 
      , 5:
        { Id: 5
        , name: 'test5'
        , parameters: 
          [ { name: 'application_instance', value: 'home',              type: 'generic' } 
          , { name: 'application_name',     value: 'initial_disk_init', type: 'generic' } 
          , { name: 'application_role',     value: 'disk_initial',      type: 'generic' } 
          , { name: 'customer_environment', value: 'development',       type: 'generic' } 
          , { name: 'customer_name',        value: 'guest',             type: 'generic' } 
          ] 
         } 
      ]

我需要用多个条件过滤它。

filters = {
  application_name: 'initial',
  application_role: 'disk_init_role'
}

我制作了一个过滤数据的功能,但这仅适用于一个条件

  filterArray (array, filters) {
    for (var [key, value] of Object.entries(filters)) {
      const res = Object.values(array).filter(
        item => item.parameters.some(param => param.name === `${key}` && param.value === `${value}`)
      )

      return results

    }
}

遍历数组以便满足两个条件(过滤器)的最佳方法是什么?结果只需要 id 1 和 4 并且需要在返回结果数组中。

标签: javascriptarraysloops

解决方案


这会将所有过滤器应用于每个数组元素。只有满足所有过滤条件时,才会将数组元素添加到结果数组中。

const arrays= [
  {
    "0": {
      "Id": 1,
      "name": "test1",
      "parameters": [
        {
          "name": "application_instance",
          "value": "home",
          "type": "generic"
        },
        {
          "name": "application_name",
          "value": "initial",
          "type": "generic"
        },
        {
          "name": "application_role",
          "value": "disk_init_role",
          "type": "generic"
        },
        {
          "name": "customer_environment",
          "value": "development",
          "type": "generic"
        },
        {
          "name": "customer_name",
          "value": "guest",
          "type": "generic"
        }
      ]
    }
  },
  {
    "1": {
      "Id": 2,
      "name": "test2",
      "parameters": [
        {
          "name": "application_instance",
          "value": "home",
          "type": "generic"
        },
        {
          "name": "application_name",
          "value": "disk_init",
          "type": "generic"
        },
        {
          "name": "application_role",
          "value": "initial",
          "type": "generic"
        },
        {
          "name": "customer_environment",
          "value": "development",
          "type": "generic"
        },
        {
          "name": "customer_name",
          "value": "guest",
          "type": "generic"
        }
      ]
    }
  },
  {
    "2": {
      "Id": 3,
      "name": "test3",
      "parameters": [
        {
          "name": "application_instance",
          "value": "home",
          "type": "generic"
        },
        {
          "name": "application_name",
          "value": "initial",
          "type": "generic"
        },
        {
          "name": "application_role",
          "value": "initial",
          "type": "generic"
        },
        {
          "name": "customer_environment",
          "value": "development",
          "type": "generic"
        },
        {
          "name": "customer_name",
          "value": "guest",
          "type": "generic"
        }
      ]
    }
  },
  {
    "3": {
      "Id": 4,
      "name": "test4",
      "parameters": [
        {
          "name": "application_instance",
          "value": "home",
          "type": "generic"
        },
        {
          "name": "application_name",
          "value": "initial",
          "type": "generic"
        },
        {
          "name": "application_role",
          "value": "disk_init_role",
          "type": "generic"
        },
        {
          "name": "customer_environment",
          "value": "development",
          "type": "generic"
        },
        {
          "name": "customer_name",
          "value": "guest",
          "type": "generic"
        }
      ]
    }
  },
  {
    "5": {
      "Id": 5,
      "name": "test5",
      "parameters": [
        {
          "name": "application_instance",
          "value": "home",
          "type": "generic"
        },
        {
          "name": "application_name",
          "value": "initial_disk_init",
          "type": "generic"
        },
        {
          "name": "application_role",
          "value": "disk_initial",
          "type": "generic"
        },
        {
          "name": "customer_environment",
          "value": "development",
          "type": "generic"
        },
        {
          "name": "customer_name",
          "value": "guest",
          "type": "generic"
        }
      ]
    }
  }
];
const filters = {
  application_name: 'initial',
  application_role: 'disk_init_role'
};

const result = arrays.filter((e) => {
  const parameters = e[Object.keys(e)[0]].parameters;
  let match = true;
  Object.keys(filters).forEach((f) => {
    const parameter = parameters.find((g) => g.name === f);
    match = match && parameter.value === filters[f];
  });
  return match;
});

console.log(result);


推荐阅读