JavaScript映射为某些元素返回未定义[重复]
Posted
技术标签:
【中文标题】JavaScript映射为某些元素返回未定义[重复]【英文标题】:JavaScript map returning undefined for some elements [duplicate] 【发布时间】:2018-06-10 03:43:20 【问题描述】:鉴于以下成员数据数组,我将为会员状态不是当前的成员返回一个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
];
这是我获取该数据的代码:
function lapsedIDs (array )
return array.map( function ( member )
if ( member.membershipIsCurrent === false )
return member.MemberID;
);
lapsedIDs(members);
这是结果。我不明白为什么它会为每个未失效的会员返回 undefined
。有什么指点吗??
[ undefined, 236, undefined, 238, undefined, undefined ]
【问题讨论】:
【参考方案1】:map()
将为原始数组中的每个现有元素创建一个新元素。
如果您不 return
在所有条件下使用某些东西,则函数会自动返回 undefined ,这就是您所看到的
您可以先filter()
删除不需要的项目,然后再map()
return array.map( function ( member )
return member.membershipIsCurrent
).map(function(member)
return member.MemberID;
);
【讨论】:
【参考方案2】:为什么会出现这个问题:- 因为 .map 每次都应该在你的情况下返回一个值,如果条件为假,函数返回 undefined 因为你没有提供任何值来返回。 该怎么办 ?先用filter再用map看看下面的解决办法
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 )
return array.filter( function ( member )
return member.membershipIsCurrent === false
).map(function(member)
return member.MemberID;
);
console.log(lapsedIDs(members));
【讨论】:
【参考方案3】: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));
【讨论】:
【参考方案4】:即使您的membershipIsCurrent
测试失败,map
也希望将 something 放入数组中。所以它会抛出一个undefined
。
您可以在地图前filter
以避免这种情况。
function lapsedIDs(array)
return array.filter(member =>
return !member.membershipIsCurrent;
).map(member => member.MemberID);
lapsedIDs(members);
【讨论】:
【参考方案5】:我试图解决同样的问题,在查看这篇文章后意识到最简单的解决方案是
function lapsedIDs (array )
return array.map( function ( member )
if ( member.membershipIsCurrent === false )
return member.MemberID;
).filter(y => y !== undefined);
在我的情况下,我不知道输入是什么,我不在乎,我只想让地图返回所有定义的值。
【讨论】:
以上是关于JavaScript映射为某些元素返回未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript slice / substring仅在替换HTML innerText时返回未定义