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
}, [])