簡體   English   中英

正確使用array.map

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM