【问题标题】:How does a map() function work over an array?map() 函数如何在数组上工作?
【发布时间】:2015-02-11 16:41:27
【问题描述】:

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

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

【问题讨论】:

  • 您没有在地图函数中包含return
  • 对于此类问题,我建议您随时查看MDN Docs
  • 听起来你只是想要a.indexOf(4) >= 0。我没有看到在这里使用.map() 的理由。
  • 那是一般情况,通常map里面会有很多条件。令人讨厌的是动态更改内容。
  • 目前还不清楚您要解决什么问题。您有一个输入数组,但不清楚您希望最终输出是什么。请同时显示输入和所需的输出,我相信这里的人可以帮助您选择到达那里的最佳方式,但您必须显示所需的结果。

标签: javascript arrays debugging filter map-function


【解决方案1】:

我们来看第一个函数:

function f1(x) {
  var bool = false;

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

  return x;
}

此函数在本地更改变量bool,并返回x。所以,不管bool发生什么,这个函数等价于identity函数:

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

【讨论】:

  • 感谢您的帮助和链接。顺便说一句,我修复了编辑。
  • 现在好多了,@collegeWaldo。但是,我仍然无法理解您对第二种算法的要求。您能否就您的问题提供一些输入和输出示例,以便我可以为您提供解决方案?
  • 是的将在 24 小时内回复。
猜你喜欢
  • 1970-01-01
  • 2017-10-19
  • 2020-04-29
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2021-05-09
相关资源
最近更新 更多