Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从嵌套数组中筛选对象_Javascript_Arrays - Fatal编程技术网

Javascript 如何从嵌套数组中筛选对象

Javascript 如何从嵌套数组中筛选对象,javascript,arrays,Javascript,Arrays,我尝试从数组中过滤出孔对象objB,该数组与属性的值titleB2匹配 const array = [ { name: 'objA', subArray: [] }, { name: 'objB', subArray: [ { title: 'titleB' }, { title: 'titleB2' }, { title: 'titleB3' } ]

我尝试从数组中过滤出孔对象objB,该数组与属性的值titleB2匹配

const array = [
  {
    name: 'objA',
    subArray: []
  }, {
    name: 'objB',
    subArray: [
      {
        title: 'titleB'
      }, {
        title: 'titleB2'
      }, {
        title: 'titleB3'
      }
    ]
  }, {
    name: 'objC',
    subArray: [
      {
        title: 'titleC'
      }, {
        title: 'titleC2'
      }, {
        title: 'titleC3'
      }
    ]
  }, {
    name: 'objD',
    subArray: []
  }
]

const filterArray = array.filter(a => a.subArray.length > 0);
console.log(filterArray);
// Output: objB + objC

const resArray = filterArray.filter(a => a.subArray.filter(f => f.title === 'titleB2'));
console.log(resArray);
// Output: objB + objC
我想,我做了一些逻辑错误的事情。但究竟是什么呢

我需要输出

{
  name: 'objB',
  subArray: [
    {
      title: 'titleB'
    }, {
      title: 'titleB2'
    }, {
      title: 'titleB3'
    }
  ]
}
我可以想象我使用了filterArray.filter错误,因为它已经被过滤了?但我这样做是因为我在一个数组中有多个数组。老实说,我不是很确定


但我不明白的是,为什么我可以使用条件a=>a.subArray.length>0?但不是f=>f.title=='titleB2'

来查找子数组中具有特定标题的对象,您可以在子数组中使用,如果子数组中的某个项目与您的条件匹配,则返回true。在这种情况下,标题:

常量数组=[{name:'objA',子数组:[]},{name:'objB',子数组:[{title:'titleB'},{title:'titleB2'},{title:'titleB3'}]},{name:'objC',子数组:[{title:'titleC'},{title:'titleC2'},{title:'titleC3'},{name:'objD',子数组:[]] 让found=array.filteritem=>item.subArray.somesub=>sub.title==='titleB2' console.logfound在子阵列上使用一些而不是过滤器。它返回一个布尔值

const resArray=array.filtera=>a.subArray.somef=>f.title==='titleB2'; 控制台.logresArray; //输出:objB+objC 常量数组=[ { 名称:“objA”, 子阵列:[] }, { 名称:“objB”, 子阵列:[ { 标题:“标题” }, { 标题:“标题2” }, { 标题:“标题3” } ] }, { 名称:“objC”, 子阵列:[ { 标题:“标题” }, { 标题:“标题2” }, { 标题:“标题3” } ] }, { 名称:“objD”, 子阵列:[] } ]
哇,好的,谢谢,这帮我把事情弄清楚了。非常感谢谢谢你!这真的帮助了我,我不需要感谢人民@Equalizer-这就是投票和选择正确答案的目的。我知道,但我必须:谢谢你的反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。这就是我提到这一点的原因,所以你知道我真的很感激: