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)
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)
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)