map() 函数如何处理数组?
How does a map() function work over an array?
我书中的定义是该方法将调用它的数组的每个元素传递给您指定的函数,returns 是一个新数组,其中包含 return 的值功能。
a = [1,2,3]
a.map(function(x) { return x*x; }); // b is [1,4,9]
如果找不到 4,我希望函数仅 return 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;
}
这个函数在本地改变变量bool
,returns x
。所以,不管bool
发生什么,这个函数都等同于identity函数:
function(x) { return x; }
因为 .map(f)
return 是一个数组,其中 f
应用于所有元素,我们有 a.map(f1)
等价于 a.map(identity function)
等价于a
。
第二个函数在过滤器内部:
if( (x == 1) && ( bool = true)) return null;
我们这里有一些问题:
- 没有
function(x)
签名
- 您正在尝试访问在第一个函数中声明的
bool
变量。
我建议你在使用 map
和 filter
时使用 纯 函数,这意味着你的函数只处理传递给它们的参数,和 return 结果。
我不确定你在第一个问题中试图完成什么;请提供更多详细信息,我会尽力帮助您解决问题。
在 Google 上查找地图、过滤和缩减中的教程。例如,this egghead video.
我书中的定义是该方法将调用它的数组的每个元素传递给您指定的函数,returns 是一个新数组,其中包含 return 的值功能。
a = [1,2,3]
a.map(function(x) { return x*x; }); // b is [1,4,9]
如果找不到 4,我希望函数仅 return 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;
}
这个函数在本地改变变量bool
,returns x
。所以,不管bool
发生什么,这个函数都等同于identity函数:
function(x) { return x; }
因为 .map(f)
return 是一个数组,其中 f
应用于所有元素,我们有 a.map(f1)
等价于 a.map(identity function)
等价于a
。
第二个函数在过滤器内部:
if( (x == 1) && ( bool = true)) return null;
我们这里有一些问题:
- 没有
function(x)
签名 - 您正在尝试访问在第一个函数中声明的
bool
变量。
我建议你在使用 map
和 filter
时使用 纯 函数,这意味着你的函数只处理传递给它们的参数,和 return 结果。
我不确定你在第一个问题中试图完成什么;请提供更多详细信息,我会尽力帮助您解决问题。
在 Google 上查找地图、过滤和缩减中的教程。例如,this egghead video.