javascript - Array.filter 没有返回预期的输出

标签 javascript ecmascript-6

我有一个嵌套的数据数组。我能够根据我的条件获取第一组数据,但是当我对此结果集应用 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 时,它返回的输出为未定义。

我哪里出错了?

最佳答案

您可以在过滤后的数组上应用过滤器来获取结果,但是由于它将是一个数组的数组,因此您需要在过滤之前映射过滤后的数组。

但是,您可以简单地使用化简器来展平初始 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);

关于javascript - Array.filter 没有返回预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842004/

相关文章:

javascript - 从 Asp :Menu 运行每个 MenuItem 的 javascript 函数

javascript - 在 api 请求解析之前,componentWillMount 检查未定义

javascript - Ramda,检查字符串是否有效

javascript - 谷歌地图 : Customize only the destination marker in a route without setting supressmarkers as true

java - 在 selenium RC 中过滤 javascript XHR 调用

javascript - 如何使用 Chai/Sinon 重构 jasmine.any() 功能

javascript - 清除模型并重置为默认值时防止模型设置 `change` 事件?

javascript - 如果默认为 text/javascript,script 元素的 HTML “nomodule” 属性的用途是什么?

javascript - 元组/二维数组的 ES6 映射函数

javascript - 如何运行 webpack 转换后的函数?