Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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_Ecmascript 6 - Fatal编程技术网

Javascript 对象的嵌套数组中的过滤器

Javascript 对象的嵌套数组中的过滤器,javascript,ecmascript-6,Javascript,Ecmascript 6,我希望有一个数组,返回基于选中属性的特定属性,并希望尽可能过滤出所选技能的级别 const data = [ { "name": "Beginner", "skills": [ { "name": "Skill 1", "checked": false }, { "name": "Skill 2",

我希望有一个数组,返回基于选中属性的特定属性,并希望尽可能过滤出所选技能的级别

const data = [
      {
        "name": "Beginner",
        "skills": [
          {
            "name": "Skill 1",
            "checked": false
          },
          {
            "name": "Skill 2",
            "checked": true
          }
        ]
      },
      {
        "name": "Intermediate",
        "skills": [
          {
            "name": "Skill 1",
            "checked": true
          },
          {
            "name": "Skill 2",
            "checked": false
          }
        ]
      },
      {
        "name": "Professional",
        "skills": [
          {
            "name": "Skill 1",
            "checked": false
          },
          {
            "name": "Skill 2",
            "checked": false
          }
        ]
      },
    ]
该函数返回选中的技能,但也返回所有级别对象

levelwithskills = data.map(level =>
              Object.assign({}, level, {
              skills: level.skills.filter(skill => skill.checked)
            })
          )
我希望得到格式的结果

   [
      {
        "name": "Beginner",
        "skills": [
          {
            "name": "Skill 2",
            "checked": true
          }
        ]
      },
      {
        "name": "Intermediate",
        "skills": [
          {
            "name": "Skill 1",
            "checked": true
          }
        ]
      }
    ]

映射后,
根据项目是否具有任何
技能来过滤

const数据=[{
“姓名”:“初学者”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[{
“姓名”:“技能1”,
“已检查”:真
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
{
“姓名”:“专业人士”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
]
levelwithskills=数据
.map(level=>({…level,skills:level.skills.filter(skill=>skill.checked)}))
.filter(({skills})=>skills.length)

控制台日志(levelwithskills)映射后,
根据项目是否具有任何
技能过滤

const数据=[{
“姓名”:“初学者”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[{
“姓名”:“技能1”,
“已检查”:真
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
{
“姓名”:“专业人士”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
]
levelwithskills=数据
.map(level=>({…level,skills:level.skills.filter(skill=>skill.checked)}))
.filter(({skills})=>skills.length)
控制台日志(levelwithskills)您可以使用方法来完成

const数据=[{
“姓名”:“初学者”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[{
“姓名”:“技能1”,
“已检查”:真
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
{
“姓名”:“专业人士”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
];
const levelwithskills=数据。reduce((arr,level)=>{
让skills=level.skills.filter(({checked})=>checked);
skills.length和arr.push({…级别,skills});
返回arr
}, [])
log(levelwithskills)
您可以使用方法执行此操作

const数据=[{
“姓名”:“初学者”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[{
“姓名”:“技能1”,
“已检查”:真
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
{
“姓名”:“专业人士”,
“技能”:[{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
];
const levelwithskills=数据。reduce((arr,level)=>{
让skills=level.skills.filter(({checked})=>checked);
skills.length和arr.push({…级别,skills});
返回arr
}, [])
console.log(levelwithskills)
const数据=[
{
“姓名”:“初学者”,
“技能”:[
{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[
{
“姓名”:“技能1”,
“已检查”:真
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
{
“姓名”:“专业人士”,
“技能”:[
{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
]
让newData=data.map(d=>({
D
技能:d.skills.filter(fd=>fd.checked)
})).filter(afd=>afd.skills.length)
console.log(newData)
const数据=[
{
“姓名”:“初学者”,
“技能”:[
{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[
{
“姓名”:“技能1”,
“已检查”:真
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
{
“姓名”:“专业人士”,
“技能”:[
{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“选中”:false
}
]
},
]
让newData=data.map(d=>({
D
技能:d.skills.filter(fd=>fd.checked)
})).filter(afd=>afd.skills.length)

console.log(newData)同样,我们也可以按

const数据=[
{
“姓名”:“初学者”,
“技能”:[
{
“姓名”:“技能1”,
“选中”:false
},
{
“姓名”:“技能2”,
“已检查”:真
}
]
},
{
“名称”:“中间”,
“技能”:[
{
“不
const levelwithskills = data.reduce((arr, level) => {
  // filter skills
  let skills = level.skills.filter(({ checked }) => checked);
  // check length of filtered skills if greater than 0 then push into array
  skills.length && arr.push({ ...level, skills });
  // return array reference
  return arr
  // set initial value as an empty array for the result
}, [])