正确使用array.map

时间:2017-02-12 06:40:06

标签: javascript arrays

我不确定为什么我的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

3 个答案:

答案 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()。它是返回函数中的一个新函数。也适用于返回此函数。

&#13;
&#13;
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;
&#13;
&#13;