Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript map()函数如何在数组上工作?_Javascript_Arrays_Debugging_Filter_Map Function - Fatal编程技术网

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

Javascript map()函数如何在数组上工作?,javascript,arrays,debugging,filter,map-function,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( (

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

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现在被称为未知。如果在“unknown”之后发现任何内容,请在加入之前从列表中删除“unknown”

 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;
}
function(x) { return x; }
此函数在本地更改变量
bool
,并返回
x
。因此,无论
bool
发生什么情况,此函数都等效于标识函数:

function f1(x) {
  var bool = false;

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

  return x;
}
function(x) { return x; }
由于
.map(f)
返回一个数组,其中
f
应用于所有元素,因此
a.map(f1)
相当于
a.map(标识函数)
相当于
a

第二个功能位于过滤器内部:

if( (x == 1) && ( bool = true)) return null;
我们这里有一些问题:

  • 没有
    函数(x)
    签名
  • 您正试图访问在第一个函数中声明的
    bool
    变量
无论何时使用
map
filter
,我建议您使用纯函数,这意味着您的函数只需处理传递给它们的参数,然后返回结果

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


在Google上的map、filter和reduce中查找教程。例如,.

你没有在map函数中包含一个
return
。对于这样的问题,我建议你经常看一看。听起来你只是想
a.indexOf(4)>=0
。我看不出有什么理由在这里使用
.map()
。这是一个一般情况,通常在map中会有很多条件。令人恼火的是动态地改变内容。只是不清楚你想解决什么问题。您有一个输入数组,但不清楚您希望最终输出是什么。请同时显示输入和所需输出,我相信这里的人可以帮助您选择最佳方式,但您必须显示所需结果。感谢您的帮助和链接。顺便说一句,我修正了编辑。现在好多了,@collegaldo。但是,我仍然无法理解第二个算法需要什么。你能就你的问题给出一些输入和输出的例子吗,这样我就可以帮助你解决问题了?是的,我会在24小时内回复。