Array.filter не возвращает ожидаемый результат - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть вложенный массив данных.Я могу получить первый набор данных на основе своего состояния, но когда я применяю Array.filter к этому набору результатов, он не дает ожидаемого результата.

{
  "data": [
    {
      "Date": "02/04/2019",
      "Total": "1000",
      "Success": "850",
      "Failure": "150",
      "FailureDeatils": [
        {
          "name": "Reason1",
          "Count": 2,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        },
        {
          "name": "Reason2",
          "Count": 6,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        }
      ]
    },
    {
      "Date": "03/04/2019",
      "Total": "800",
      "Success": "750",
      "Failure": "150",
      "FailureDeatils": [
        {
          "name": "Reason1",
          "Count": 3,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        },
        {
          "name": "Reason2",
          "Count": 1,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        }
      ]
    }
  ]
}

Сначала я применилниже Array.filter для получения FailureDetails на основе даты:

var filtered = data
          .filter(value => value.Date == "02/04/2019")
          .map(e => e.FailureDeatils);

Это приведет к следующему выводу:

FailureDeatils:[{"name":"Reason1","Count":2,"Description":[{"DescriptionID": "01","Status": "Failure Point1"},{"DescriptionID": "01","Status": "Failure Point1"}]},{"name":"Reason2","Count":6,"Description":[{"DescriptionID": "01","Status": "Failure Point1"},{"DescriptionID": "01","Status": "Failure Point1"}]}]

Теперь основано на Reason, т.е. Reason1 или Reason 2, Iхочу получить описание.Но когда я применяю Array.filter к этому, он возвращает вывод как неопределенный.

Где я иду не так?

1 Ответ

2 голосов
/ 25 апреля 2019

Вы бы применили фильтр к отфильтрованному массиву, чтобы получить результат, однако, поскольку это будет массив массива, вам нужно будет отобразить фильтрованный массив перед его фильтрацией.

Однако вы можете просто использоватьредуктор для выравнивания исходного массива FailureDescription вместо его сопоставления.

var data = [
    {
      "Date": "02/04/2019",
      "Total": "1000",
      "Success": "850",
      "Failure": "150",
      "FailureDeatils": [
        {
          "name": "Reason1",
          "Count": 2,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        },
        {
          "name": "Reason2",
          "Count": 6,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        }
      ]
    },
    {
      "Date": "03/04/2019",
      "Total": "800",
      "Success": "750",
      "Failure": "150",
      "FailureDeatils": [
        {
          "name": "Reason1",
          "Count": 3,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        },
        {
          "name": "Reason2",
          "Count": 1,
          "Description": [
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            },
            {
              "DescriptionID": "01",
              "Status": "Failure Point1"
            }
          ]
        }
      ]
    }
  ]

var filtered = data
          .filter(value => value.Date == "02/04/2019")
          .reduce((acc,e) => acc.concat(e.FailureDeatils), []);
          
const reason = "Reason1";


var res = filtered.filter((data) => data.name == reason).reduce((acc, item) =>{
    acc = acc.concat(item.Description);
    return acc;
}, []);

console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...