簡體   English   中英

Array.filter沒有返回預期的輸出

[英]Array.filter is not returning the expected output

我有一個嵌套的數據數組。 我可以根據自己的條件獲取第一組數據,但是當我在此結果集上應用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,我想要獲得描述。 但是當我在其上應用Array.filter時,它將返回未定義的輸出。

我要去哪里錯了?

您可以在過濾后的數組上應用過濾器以獲取結果,但是由於它是一個數組的數組,因此您也需要在過濾后的數組上進行映射。

但是,您可以簡單地使用reducer展平初始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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM