微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果属性为true,则从对象数组返回指定值的函数

如何解决如果属性为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()返回仅包含username键的一组突变的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.admintrue的元素的数组。

map(u => ({name: u.name,dob: u.dob}))然后遍历已过滤数组的每个元素,并将每个元素更改为仅包含所传递对象的name:dob:的对象。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。