map()函数如何在数组上工作?

时间:2015-02-11 16:41:27

标签: javascript arrays debugging filter map-function

本书中的定义是该方法将调用它的数组的每个元素传递给您指定的函数,并返回一个包含该函数返回的值的新数组。

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

如果找不到4,我希望函数只返回1。

案件将是

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(', ');

1 个答案:

答案 0 :(得分: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时都使用 pure 函数,这意味着您的函数只处理传递给它们的参数,并返回结果。

我不确定你在第一个问题上想要完成什么;请提供更多详细信息,我会尽力帮助您解决问题。

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