[英]Using array.map properly
我不確定為什么我的array.map函數返回未定義,但是我的for循環返回結果。 當我控制台日志映射時,它顯示:
湯姆·迪克·哈里
並在控制台日志中顯示循環時
['湯姆','迪克','哈里']
不知道這是否是顯示未防御的問題。
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
首先,您的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
see 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]));
您的代碼的問題在於,回調中的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
只需在map()
函數中添加return
。它是return函數內部的新函數之一。因此也可以使用return this。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.