0

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

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

1 回答 1

2

我们来看第一个函数:

function f1(x) {
  var bool = false;

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

  return x;
}

bool此函数在本地更改变量,并返回x. 所以,无论 发生什么bool,这个函数都等价于等函数:

function(x) { return x; }

因为返回一个应用于所有元素.map(f)的数组,所以我们有 that等价于which 等价于.fa.map(f1)a.map(identity function)a

第二个函数在过滤器内部:

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

我们这里有一些问题:

  • 没有function(x)签名
  • 您正在尝试访问bool在第一个函数上声明的变量。

我建议无论何时使用mapand filter,都使用函数,这意味着您的函数只处理传递给它们的参数,并返回结果。

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

在 Google 上查找地图、过滤和归约教程。例如,这个蛋头视频

于 2015-02-11T17:12:49.317 回答