我不确定为什么我的array.map函数返回undefined但我的for循环返回结果。当我控制日志地图时,它会显示:
汤姆 迪克 哈利
当控制台记录循环时显示
[' Tom',' Dick',' Harry']
不确定这是否是显示不受欢迎的问题。
var friends = ["Tom", "Dick", "Harry"];
var secondLevelFriends = ["Anne", "Harry", "Quinton"];
var allUsers = ["Tom", "Dick", "Harry", "Anne", "Quinton", "Katie", "Mary"];
function findPotentialFriends(existingFriends) {
return function(x) {
// existingFriends.map(function(elem) {
// if(elem === x) return false;
// else return true;
// })
for(var i = 0; i < existingFriends.length; i++) {
if(existingFriends[i] === x) return false;
else return true;
}
}
}
var isNotAFriend = findPotentialFriends( friends );
isNotAFriend(allUsers[0]); // false
答案 0 :(得分:1)
首先,你的for循环有一些逻辑问题。它应该写成:
var foundFriend = false;
for(var i = 0; i < existingFriends.length; i++) {
if (existingFriends[i] === x)
{
foundFriend = true;
break;
}
}
return !foundFriend;
isNotAFriend
评估为undefined
的原因是您忘记了return
语句。此外,Arrays.map
只是简单地获取数组的每个元素,将其传递给函数,然后根据函数返回的内容创建一个新数组。您可能要搜索的内容可能是Array.some
,请参阅docs。例如:
var friends = ["Tom", "Dick", "Harry"];
var secondLevelFriends = ["Anne", "Harry", "Quinton"];
var allUsers = ["Tom", "Dick", "Harry", "Anne", "Quinton", "Katie", "Mary"];
function findPotentialFriends(existingFriends) {
return function(x) {
return !existingFriends.some(function(elem) {
return elem === x;
});
}
}
var isNotAFriend = findPotentialFriends( friends );
console.log(isNotAFriend(allUsers[0]));
答案 1 :(得分:1)
您的代码的问题是回调中的return
语句只返回map()
,它们不会返回到原始调用者。 map()
将所有这些返回值收集到一个数组中并返回此值,但您永远不会对existingfriends.map()
的结果执行任何操作。
Javascript有一个内置函数来搜索数组中的匹配元素Array.prototype.indexOf()
。如果未找到匹配项,则返回-1
。
所以你可以写一下:
var friends = ["Tom", "Dick", "Harry"];
var secondLevelFriends = ["Anne", "Harry", "Quinton"];
var allUsers = ["Tom", "Dick", "Harry", "Anne", "Quinton", "Katie", "Mary"];
function findPotentialFriends(existingFriends) {
return function(x) {
return existingFriends.indexOf(x) == -1;
}
}
var isNotAFriend = findPotentialFriends(friends);
console.log(isNotAFriend(allUsers[0])); // false
答案 2 :(得分:0)
只需在return
函数中添加map()
。它是返回函数中的一个新函数。也适用于返回此函数。
var friends = ["Tom", "Dick", "Harry"];
var secondLevelFriends = ["Anne", "Harry", "Quinton"];
var allUsers = ["Tom", "Dick", "Harry", "Anne", "Quinton", "Katie", "Mary"];
function findPotentialFriends(existingFriends) {
return function(x) {
return existingFriends.map(function(elem) {
if(elem === x) return false;
else return true;
})
// for(var i = 0; i < existingFriends.length; i++) {
// if(existingFriends[i] === x) return false;
// else return true;
//}
}
}
var isNotAFriend = findPotentialFriends(friends);
console.log(isNotAFriend(allUsers[0])); // false
&#13;