JavaScript映射对某些元素返回未定义

mik*_*tak 4 javascript object array.prototype.map

给定以下成员数据数组,我memberID将为成员状态不是当前的成员返回的数组。

这是会员数据:

var members = [
  {
    firstName: 'Howard',
    lastName: 'Lee',
    membershipIsCurrent: true,
    MemberID: 235
  },
  {
    firstName: 'James',
    lastName: 'Icharis',
    membershipIsCurrent: false,
    MemberID: 236
  },
  {
    firstName: 'Thomas',
    lastName: 'Cronquist',
    membershipIsCurrent: true,
    MemberID: 237
  },
  {
    firstName: 'Philip',
    lastName: 'Grover',
    membershipIsCurrent: false,
    MemberID: 238
  },
  {
    firstName: 'Eric',
    lastName: 'Broadstone',
    membershipIsCurrent: true,
    MemberID: 239
  },
  {
    firstName: 'Hunter',
    lastName: 'Gonzales',
    membershipIsCurrent: true,
    MemberID: 240
  }];
Run Code Online (Sandbox Code Playgroud)

这是我获取这些数据的代码:

function lapsedIDs (array ) {
  return array.map( function ( member ) {
    if ( member.membershipIsCurrent === false ) {
      return member.MemberID;
    }
  });
}

lapsedIDs(members);
Run Code Online (Sandbox Code Playgroud)

这是结果。我不明白为什么undefined会员资格未过期的每个会员都会得到回报。任何指针?

[ undefined, 236, undefined, 238, undefined, undefined ]
Run Code Online (Sandbox Code Playgroud)

cha*_*tfl 7

map() 将为原始数组中的每个现有元素创建一个新元素。

如果您并非return在所有情况下都满足要求,则函数会自动返回undefined,这就是您所看到的

您可以filter()先删除不需要的物品,然后map()

 return array.map( function ( member ) {
    return member.membershipIsCurrent
  }).map(function(member){
     return member.MemberID;
  });
Run Code Online (Sandbox Code Playgroud)


mhe*_*zig 0

Array.map()在源数组中的每个元素上运行,并将其映射到其他元素。您不会返回当前成员的成员 ID,因此会将它们映射到undefined. 您可能只想修改您的函数以开始let lapsedMembers = [];,然后使用forEach而不是map,并且在该循环中只需将 ID 推送到lapsedMembers数组。

var members = [
  {
    firstName: 'Howard',
    lastName: 'Lee',
    membershipIsCurrent: true,
    MemberID: 235
  },
  {
    firstName: 'James',
    lastName: 'Icharis',
    membershipIsCurrent: false,
    MemberID: 236
  },
  {
    firstName: 'Thomas',
    lastName: 'Cronquist',
    membershipIsCurrent: true,
    MemberID: 237
  },
  {
    firstName: 'Philip',
    lastName: 'Grover',
    membershipIsCurrent: false,
    MemberID: 238
  },
  {
    firstName: 'Eric',
    lastName: 'Broadstone',
    membershipIsCurrent: true,
    MemberID: 239
  },
  {
    firstName: 'Hunter',
    lastName: 'Gonzales',
    membershipIsCurrent: true,
    MemberID: 240
  }];
  
function lapsedIDs ( array ) {
  let lapsedMembers = [];
  
  array.forEach(function ( member ) {
    if ( member.membershipIsCurrent === false ) {
      lapsedMembers.push(member.MemberID);
    }
  });
  
  return lapsedMembers;
}

console.log(lapsedIDs(members));
Run Code Online (Sandbox Code Playgroud)