我正在做一个小练习: 问题是我想要这个:
=> ['kept','kept']
但是,我一直收到这个:
function keep(array, keeper) {
//This will return an array of undefined's and 'kept's
// =>[ 'kept', undefined, 'kept', undefined, undefined ]
matchingNumbers = array.map(function matching(element){
if (element === keeper) {
return element;
}
});
//Eliminate all undefined's from the matchingNumbers array
matchingLength = matchingNumbers.length;
for (var i = 1; i < matchingLength; i++) {
if(matchingNumbers[i] === undefined) {
(matchingNumbers.splice(i, 1));
}
}
return matchingNumbers;
}
keep(['kept', 'thirty', 'kept', 2, 1], 'kept')
我试图用for循环拼接matchingNumbers中的所有未定义的,那么为什么还剩下最后一个未定义的?
最佳答案
当函数不执行return
语句时,它默认返回undefined
。 array.map() 将函数的返回值放入结果数组中,其中包括那些未定义的值。
您应该使用array.filter
而不是array.map
:
matchingNumbers = array.filter(function matching(element){
return element === keeper;
});
关于javascript - 为什么我的数组的最后一个元素返回未定义,而不是拼接它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450017/