如何解决如果属性为true,则从对象数组返回指定值的函数
我正在解决一个挑战:给定一组对象,编写一个函数admin,该函数返回标记为“ admin”的所有用户的姓名和生日。
const users = [
{
name: 'Homer',role: 'clerk',dob: '12/02/1988',admin: false
},{
name: 'Lisa',role: 'staff',dob: '01/30/1965',{
name: 'Marge',role: 'associate',dob: '09/10/1980',admin: true
}
]
function admin(myObj) {
function groupBy(myObj,prop) {
return myObj.reduce(function (acc,obj) {
let key = obj[prop]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(obj)
return acc
},{});
}
let trueAdmin = groupBy(myObj,'admin');
console.log(trueAdmin[true].map(({name,dob}) => `Name: ${name}
dob: ${dob}
`).join(`
`));
}
admin(users);
运行测试时,它以未定义形式返回,我不知道为什么。我正在寻找预期的输出: 管理员(用户)
// Name: Marge
// dob: 09/10/1980
解决方法
如果您只想将它们登录到控制台,则只需使用forEach()
const users = [
{
name: 'Homer',role: 'clerk',dob: '12/02/1988',admin: false
},{
name: 'Lisa',role: 'staff',dob: '01/30/1965',{
name: 'Marge',role: 'associate',dob: '09/10/1980',admin: true
}
]
function admin(myArray) {
myArray.forEach(user => {
if (user.admin) console.log(`Name: ${user.name},DOB: ${user.dob}`);
});
}
admin(users);
如果您想返回匹配的用户,可以使用filter()
返回由回调过滤的数组,然后map()
可以更改过滤后的数组的元素,使其符合预期输出。
在以下代码段中,admin()
返回仅包含user
和name
键的一组突变的dob
对象。
const users = [
{
name: 'Homer',admin: true
}
]
function admin(myArray) {
return myArray.filter(u => u.admin).map(u => ({name: u.name,dob: u.dob}));
}
console.log(admin(users));
filter(u => u.admin)
遍历每个对象,并返回一个包含user.admin
为true
的元素的数组。
map(u => ({name: u.name,dob: u.dob}))
然后遍历已过滤数组的每个元素,并将每个元素更改为仅包含所传递对象的name:
和dob:
的对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。