2015-02-11 31 views
0

我书中的定义是该方法将调用它的数组的每个元素传递给您指定的函数,并返回一个包含该函数返回值的新数组。map()函数如何在数组上工作?

a = [1,2,3] 
a.map(function(x) { return x*x; }); // b is [1,4,9] 

我想这个函数只返回1,如果没有找到4。

的情况下将是

var bool = false; 
a.map(function(x) { 

if (x == 4){ 
    bool = true; 
} 

return x; 
}).filter(function(x) {if((x == 1) && (bool = true)){ return null}}); 

我想用它是通过迭代数组和比动态地改变在端部的地图的方式。我会怎么做?

我的问题现在是字符串,所以 这里是另一种情况,其中1现在称为未知。如果发现“未知”之后,请在加入之前从列表中删除“未知”。

var wordList = []; 
    var newSource = false; 
    str = results[i].Meaning.map(function(m){ 
     count++; 

     if ((!m.Source && !contains(wordList, "unknown"))) { 
      wordList[count] = "unknown"; 
      return "unknown"; 
      } 
     if (!m.Source) { 
      return m.Source; 
     } 

      if (contains(wordList, "unknown")) { 
       newSource = true; 
      } 
      if (!contains(wordList, m.Source)) { 
       wordList[count] = m.Source; 
       return m.Source; 
      } 

    }).filter(function(x) { return x }).filter(function(x){ 
     if (newSource == true) { return (x != "unknown")}}).join(', '); 
+0

您没有在地图功能中包含“return”。 – Mouser 2015-02-11 16:43:50

+0

对于这样的问题,我建议始终查看[MDN文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)。 – DontVoteMeDown 2015-02-11 16:44:07

+0

听起来你只是想'a.indexOf(4)> = 0'。我没有看到在这里使用'.map()'的理由。 – jfriend00 2015-02-11 16:53:18

回答

2

让我们来看看第一个函数:

function f1(x) { 
    var bool = false; 

    if (x == 4){ 
    bool = true; 
    } 

    return x; 
} 

此功能改变的变量bool本地,并返回x。所以,不管发生了什么bool,此功能相当于身份功能:

function(x) { return x; } 

因为.map(f)回到应用于所有元素与f数组,我们有a.map(f1)相当于a.map(identity function)这相当于到a

第二个功能是在过滤器内:

if((x == 1) && (bool = true)) return null; 

我们有一些问题在这里:

  • 有没有function(x)签名
  • 您试图访问bool变量,被宣布在第一个功能上。

我建议,只要您使用mapfilter,您使用功能,这意味着你的函数只是处理传递给它们的参数,并返回结果。

我不确定你在第一个问题中想要完成什么;请提供更多详情,我会尽力为您提供解决方案。

在Google上查找地图,筛选和缩小的教程。例如,this egghead video

+0

感谢您的帮助和链接。我通过这种方式解决了编辑问题。 – 2015-02-11 17:25:00

+0

现在好多了@collegeWaldo。但是,我仍然在理解第二种算法需要什么。你能举一些关于你的问题的输入和输出的例子,所以我可以帮你解决问题吗? – 2015-02-12 00:58:46

+0

是的,会在24小时内回复。 – 2015-02-15 19:38:22