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

How does a map() function work over an array?

本文关键字:数组 工作 函数 map      更新时间:2023-10-07

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

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

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

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时,你使用函数,这意味着你的函数只是处理传递给它们的参数,并返回结果。

我不确定你在第一个问题中试图完成什么;请提供更多细节,我会尽力帮助你解决问题。

在谷歌的地图、过滤和减少中查找教程。比如这个蛋头视频。