Как отфильтровать вложенный массив в javascript - PullRequest
0 голосов
/ 27 мая 2020

Это мои 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"
        }
      ]
    }
  ]
}

Я хочу отфильтровать данные, где "fileType": "RUNNINGCONFIG" и "fileType": "STARTUPCONFIG" присутствует внутри 'files' возвращает только этот массив.

например. Из приведенного выше json будет возвращен только второй объект.

Я попытался написать код фильтра, но он не работает должным образом, посоветуйте мне.

let versionsData = response.data.versions;


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

Ответы [ 3 ]

5 голосов
/ 27 мая 2020

Вместо вложенного фильтра можно использовать 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);

С 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);
1 голос
/ 27 мая 2020

Способ с фильтром внутри фильтра.

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);
0 голосов
/ 27 мая 2020

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...