简体   繁体   English

如何过滤 javascript 中的嵌套数组

[英]How to filter nested array in javascript

This is my json data -这是我的 json 数据 -

{
  "list": [
    {
      "deviceId": "2a-d539-4031-9bfc-4a42f2f765cf",
      "versions": [
        {
          "id": "764c20-a213-9235f4b553b3",
          "createdTime": 1590361208034,
          "files": [
            {
              "fileType": "VLAN"
            },
            {
              "fileType": "STARTUPCONFIG",
            }
          ],
          "startupRunningStatus": "OUT_OF_SYNC",
          "createdBy": "SCHEDULED"
        },
        {
          "id": "9bd33-a45a-ed2fefc46931",
          "createdTime": 1589972337717,
          "files": [
            {
              "fileType": "VLAN",
            },
            {
              "fileType": "STARTUPCONFIG",
            },
            {
              "fileType": "RUNNINGCONFIG",
            }
          ],
          "startupRunningStatus": "IN_SYNC",
          "createdBy": "SCHEDULED_FIRST_TIME"
        }
      ]
    }
  ]
}

I want to filter data, where "fileType": "RUNNINGCONFIG", and "fileType": "STARTUPCONFIG", is present inside 'files' only return that array.我想过滤数据,其中“fileType”:“RUNNINGCONFIG”和“fileType”:“STARTUPCONFIG”存在于“files”中,仅返回该数组。

eg From the above json only second object will be returned.例如,从上面的 json 只会返回第二个 object。

I tried to write some Filter code but it is not working properly, guide me.我试图编写一些过滤器代码,但它无法正常工作,请指导我。

let versionsData = response.data.versions;


versionsData = versionsData.filter(
                        versions => {
                            versions.files.filter(
                                m =>  {
                                    return m.fileType === "RUNNINGCONFIG"
                                }
                            )
                        }
                    );
                return versionsData;

Instead of nested filter you could use Array.prototype.some您可以使用Array.prototype.some而不是嵌套过滤器

 const obj = { "list": [ { "deviceId": "2a-d539-4031-9bfc-4a42f2f765cf", "versions": [ { "id": "764c20-a213-9235f4b553b3", "createdTime": 1590361208034, "files": [ { "fileType": "VLAN" }, { "fileType": "STARTUPCONFIG", } ], "startupRunningStatus": "OUT_OF_SYNC", "createdBy": "SCHEDULED" }, { "id": "9bd33-a45a-ed2fefc46931", "createdTime": 1589972337717, "files": [ { "fileType": "VLAN", }, { "fileType": "STARTUPCONFIG", }, { "fileType": "RUNNINGCONFIG", } ], "startupRunningStatus": "IN_SYNC", "createdBy": "SCHEDULED_FIRST_TIME" } ] } ] } let versionsData = obj.list[0].versions; versionsData = versionsData.filter( versions => versions.files.some( m => m.fileType === "RUNNINGCONFIG" ) && versions.files.some( m => m.fileType== 'STARTUPCONFIG' ) ); console.log(versionsData);

With Array.prototype.filter使用 Array.prototype.filter

 const obj = { "list": [ { "deviceId": "2a-d539-4031-9bfc-4a42f2f765cf", "versions": [ { "id": "764c20-a213-9235f4b553b3", "createdTime": 1590361208034, "files": [ { "fileType": "VLAN" }, { "fileType": "STARTUPCONFIG", } ], "startupRunningStatus": "OUT_OF_SYNC", "createdBy": "SCHEDULED" }, { "id": "9bd33-a45a-ed2fefc46931", "createdTime": 1589972337717, "files": [ { "fileType": "VLAN", }, { "fileType": "STARTUPCONFIG", }, { "fileType": "RUNNINGCONFIG", } ], "startupRunningStatus": "IN_SYNC", "createdBy": "SCHEDULED_FIRST_TIME" } ] } ] } let versionsData = obj.list[0].versions; versionsData = versionsData.filter( versions => { return versions.files.filter( m => { return m.fileType === "RUNNINGCONFIG" || m.fileType === "STARTUPCONFIG" }).length > 1 } ); console.log(versionsData);

A way with filter inside of filter.过滤器内部过滤器的一种方式。

 let data = { "list": [ { "deviceId": "2a-d539-4031-9bfc-4a42f2f765cf", "versions": [ { "id": "764c20-a213-9235f4b553b3", "createdTime": 1590361208034, "files": [ { "fileType": "VLAN" }, { "fileType": "STARTUPCONFIG", } ], "startupRunningStatus": "OUT_OF_SYNC", "createdBy": "SCHEDULED" }, { "id": "9bd33-a45a-ed2fefc46931", "createdTime": 1589972337717, "files": [ { "fileType": "VLAN", }, { "fileType": "STARTUPCONFIG", }, { "fileType": "RUNNINGCONFIG", } ], "startupRunningStatus": "IN_SYNC", "createdBy": "SCHEDULED_FIRST_TIME" } ] } ] }; let versionsData = /*response.*/data.list[0].versions; versionsData = versionsData.filter(versions => { return versions.files.filter(m => { return m.fileType == 'RUNNINGCONFIG' || m.fileType == 'STARTUPCONFIG'; }).length == 2; }); console.log(versionsData);

 const data = { "list": [ { "deviceId": "2a-d539-4031-9bfc-4a42f2f765cf", "versions": [ { "id": "764c20-a213-9235f4b553b3", "createdTime": 1590361208034, "files": [ { "fileType": "VLAN" }, { "fileType": "STARTUPCONFIG", } ], "startupRunningStatus": "OUT_OF_SYNC", "createdBy": "SCHEDULED" }, { "id": "9bd33-a45a-ed2fefc46931", "createdTime": 1589972337717, "files": [ { "fileType": "VLAN", }, { "fileType": "STARTUPCONFIG", }, { "fileType": "RUNNINGCONFIG", } ], "startupRunningStatus": "IN_SYNC", "createdBy": "SCHEDULED_FIRST_TIME" } ] } ] } const filterData = () => { return data.list[0].versions.reduce((output, version) => { const fileTypes = version.files.map(f => f.fileType); return fileTypes.includes('STARTUPCONFIG') && fileTypes.includes('RUNNINGCONFIG')? [...output, version]: output }, []) } console.log(filterData());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM