[英]Return undefined on Array.map
我不希望这张地图返回未定义我该怎么做?
var onCompareSelectedClick = function () {
var talentProfileInfoForAppliedResources = appliedResourcesEntries.map(function(res) {
console.log(res);
if(res.compareSelected == true) {
return data.getTalentProfileInfo(res.RES.RES_ID);
}
});
console.log(talentProfileInfoForAppliedResources);
this.openCompareTPDlg(talentProfileInfoForAppliedResources);
}.bind(this);
只需在map
方法中添加else
语句,返回所需的值,如:
if(res.compareSelected == true) {
return data.getTalentProfileInfo(res.RES.RES_ID);
} else {
return 'default_value';
}
TL; DR
在Array.map之后使用Array.filter方法删除新数组中的未定义元素。
扩展@ Bloomca的答案:
map()方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。
因此,您的新数组包含未定义元素的原因是因为您没有在使用提供的函数调用的某些元素的函数内显式调用return。 在Javascript中,不显式调用return将返回undefined
。
例如,在以下方法中,newArray将设置为记录的结果:
[ undefined, 2, 3 ]
newArray = [1,2,3].map(function(elem) { if (elem > 1) return elem })
console.log(newArray)
这就是为什么上面提供的答案将不再导致新数组中undefined
元素。 如果条件res.compareSelected == true
对于else块中的return语句不是真的,则条件将解析(请注意,您可以简单地删除此处的true
并简单地放入res.compareSelected
,这将是更好的做法)。
根据您的问题,您可能会发现使用Array.filter
方法返回没有未定义值的Array
。 并且只使用您调用函数data.getTalentProfileInfo(res.RES.RES_ID)
。
您可以通过以下方式执行此操作:
var onCompareSelectedClick = function () {
var arr = appliedResourcesEntries.map(function(res) {
if(res.compareSelected == true) {
return data.getTalentProfileInfo(res.RES.RES_ID);
}
});
var talentProfileInfoForAppliedResources = arr.filter(function(elem) {
return elem;
});
console.log(talentProfileInfoForAppliedResources);
this.openCompareTPDlg(talentProfileInfoForAppliedResources);
}.bind(this);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.