kinnu
kinnu

Reputation: 388

Array.filter is not returning the required output

I am having nested array of data.I am able to get the first set of data based on my condition but when I am applying array.filter on this result set it is not giving me the expected result.

Below is array of data:

{
  "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"
            }
          ]
        }
      ]
    }
  ]
}

First I have applied the below array.filter to get the FailureDetails based on date:

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

This is giving me Failure Details with Description but now on Reason Id ,i want to get the Description but it is not working and returning the result as "undefined"

Can anyone suggest where I am going wrong??

Upvotes: 1

Views: 60

Answers (3)

Dave
Dave

Reputation: 2190

You wrote the wrong variable in the filter:

should be:

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

and not:

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

Here the working example based on your code:

const object = {
        "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"
                  }
                ]
              }
            ]
          }
        ]
      }
    
    const filtered = object.data.filter(value => value.Date == "02/04/2019").map(e => e.FailureDeatils);
    
    console.log(filtered);

Upvotes: 0

Ankit Agarwal
Ankit Agarwal

Reputation: 30739

You need to do value.Date instead of data.Date because value reference to each object in the data array:

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")
  .map(e => e.FailureDeatils);
console.log(filtered);

Upvotes: 3

Jivings
Jivings

Reputation: 23250

Looks like you mean value.Date not data.Date.

.filter(value => value.Date == "02/04/2019")

Upvotes: 2

Related Questions