javascript - 双过滤器在 JSON 数组中不起作用

标签 javascript arrays json

我在过滤 JSON 数组时遇到了一些问题。这是我想要的代码和结果,所以请帮我过滤一下。

var all = [
  {
    data : "test1",
    dataArray : [
      {
        name : "abc",
        status : true,
        address: "test"
      }, {
        name : "xyz",
        status : false,
        address: "test"
      }, {
        name : "pqr",
        status : true,
        address: "test"
      },
    ]
  },
  {
    data : "test2",
    dataArray : [
      {
        name : "abc",
        status : true,
        address: "test"
      }, {
        name : "xyz",
        status : false,
        address: "test"
      }, {
        name : "pqr",
        status : false,
        address: "test"
      },
    ]
  },
  {
    data : "test3",
    dataArray : [
      {
        name : "abc",
        status : false,
      }, {
        name : "xyz",
        status : false,
      }, {
        name : "pqr",
        status : true,
      },
    ]
  }
]

console.log(JSON.stringify(all.filter((a)=>a.dataArray.filter((b)=>b.status==true)),null,2));

想要这样的结果:
只有状态为 true 的数据,但我不知道为什么过滤器返回所有 JSON 数据。嵌套过滤器有什么问题吗??

a = [
    {
      data : "test1",
      dataArray : [
        {
          status : true,
          address: "test"
        },{
          status : true,
          address: "test"
        },
      ]
    },
    {
      data : "test2",
      dataArray : [
        {
          status : true,
          address: "test"
        },
      ]
    },
    {
      data : "test3",
      dataArray : [
        {
            status : true,
            address: "test"
        }, {
            status : true,
            address: "test"
        }
      ]
    }
  ]

我使用了嵌套过滤器,但它不起作用。我怎样才能得到结果?

最佳答案

您需要将filter应用于dataArray,而不是all

all.forEach( s => s.dataArray = s.dataArray.filter( t => t.status ) )

注意事项

  • 此解决方案会改变 all 数组,因此如果您不想改变 - 首先创建 all 的深拷贝。

演示

var all = [{
    data: "test1",
    dataArray: [{
      name: "abc",
      status: true,
      address: "test"
    }, {
      name: "xyz",
      status: false,
      address: "test"
    }, {
      name: "pqr",
      status: true,
      address: "test"
    }, ]
  },
  {
    data: "test2",
    dataArray: [{
      name: "abc",
      status: true,
      address: "test"
    }, {
      name: "xyz",
      status: false,
      address: "test"
    }, {
      name: "pqr",
      status: false,
      address: "test"
    }, ]
  },
  {
    data: "test3",
    dataArray: [{
      name: "abc",
      status: false,
    }, {
      name: "xyz",
      status: false,
    }, {
      name: "pqr",
      status: true,
    }, ]
  }
];

all.forEach(s => s.dataArray = s.dataArray.filter(t => t.status))

console.log(all);

关于javascript - 双过滤器在 JSON 数组中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569570/

相关文章:

javascript - 从回调函数内部使用 "pure"Node.js 重定向

c# - 将 Json 数组解析为 C# 中的类

json - 在 Swift 中迭代解码 JSON 的字典键

javascript - Node : TypeError: Cannot read property 'on' of undefined

javascript - 如何使用 JavaScript 动态构建路点数组?

javascript - 我怎样才能捕捉到链接的打开情况

javascript - 将信息窗口添加到地标

javascript - 循环遍历二维数组以获取第二列值

java - 如何对给定元素左侧的 N 个数组元素求和?

javascript - 无法检查从 json 编码的 php 数组准备的 javascript json 中的对象值