简体   繁体   English

javascript 从对象的 arrays 过滤值

[英]javascript filter values from arrays of objects

I'm trying to find is_Y === 'Y' object from like this code我试图从这样的代码中找到 is_Y === 'Y' object

 const tmpArray = [ [{ "no": 1, "is_Y": "Y", }], [{ "no": 2, "is_Y": "N", }], [{ "no": 3, "is_Y": "Y", }], [{ "no": 3, "is_Y": "N", }], [{ "no": 4, "is_Y": "Y", }], [{ "no": 5, "is_Y": "N", }, { "no": 6, "is_Y": "Y", }] ]; function findY(array) { return array.filter(function (item) { return item.filter(function (item2) { return item2.is_Y === 'Y'; }); }); } console.log(findY(tmpArray));

result is结果是

[
  [ { no: 1, is_Y: 'Y' } ],
  [ { no: 2, is_Y: 'N' } ],
  [ { no: 3, is_Y: 'Y' } ],
  [ { no: 3, is_Y: 'N' } ],
  [ { no: 4, is_Y: 'Y' } ],
  [ { no: 5, is_Y: 'N' }, { no: 6, is_Y: 'Y' } ]
]

but I'd like to get results format like below但我想得到如下格式的结果

[
  { no: 1, is_Y: 'Y' },
  { no: 3, is_Y: 'Y' },
  { no: 4, is_Y: 'Y' },
  { no: 6, is_Y: 'Y' } 
]

what shall I do?我该怎么办?

The easiest fix is to add an flat() before calling filter() :最简单的解决方法是在调用filter() flat() ) :

 const tmpArray = [ [{ "no": 1, "is_Y": "Y", }], [{ "no": 2, "is_Y": "N", }], [{ "no": 3, "is_Y": "Y", }], [{ "no": 3, "is_Y": "N", }], [{ "no": 4, "is_Y": "Y", }], [{ "no": 5, "is_Y": "N", }, { "no": 6, "is_Y": "Y", }] ]; function findY(array) { return array.flat().filter(item2 => item2.is_Y === 'Y') } console.log(findY(tmpArray));

Output: Output:

[
  {
    "no": 1,
    "is_Y": "Y"
  },
  {
    "no": 3,
    "is_Y": "Y"
  },
  {
    "no": 4,
    "is_Y": "Y"
  },
  {
    "no": 6,
    "is_Y": "Y"
  }
]

Just flat the array before you filter.在过滤之前将阵列展flat

 const tmpArray = [ [{ no: 1, is_Y: "Y" }], [{ no: 2, is_Y: "N" }], [{ no: 3, is_Y: "Y" }], [{ no: 3, is_Y: "N" }], [{ no: 4, is_Y: "Y" }], [ { no: 5, is_Y: "N" }, { no: 6, is_Y: "Y" }, ], ]; function findY(array) { return array.flat().filter((item) => item.is_Y === "Y"); } console.log(findY(tmpArray));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM