Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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_Dictionary_Traversal - Fatal编程技术网

Javascript 如何让map函数返回大于第一个数组的数组?

Javascript 如何让map函数返回大于第一个数组的数组?,javascript,arrays,dictionary,traversal,Javascript,Arrays,Dictionary,Traversal,从中,它提到,除了以下参数外,还可以从map回调中修改调用map的数组,该回调包含三个参数:#1值、#2索引、#3原始数组: 此参数是可选的 值,在执行回调时用作此值。 ... 详细参数 回调由三个参数调用:元素的值, 元素的索引和要映射的数组对象 如果提供了thisArg参数,它将用作回调函数的this 价值否则,未定义的值将用作其此值。 确定回调最终可观察到的该值 根据通常的规则来确定这个 功能 map不会改变调用它的数组(尽管 回调,如果被调用,可以这样做) map处理的元素范围设置在第一

从中,它提到,除了以下参数外,还可以从map回调中修改调用map的数组,该回调包含三个参数:#1值、#2索引、#3原始数组:

此参数是可选的 值,在执行回调时用作此值。 ... 详细参数

回调由三个参数调用:元素的值, 元素的索引和要映射的数组对象

如果提供了thisArg参数,它将用作回调函数的this 价值否则,未定义的值将用作其此值。 确定回调最终可观察到的该值 根据通常的规则来确定这个 功能

map不会改变调用它的数组(尽管 回调,如果被调用,可以这样做)

map处理的元素范围设置在第一个元素之前 调用回调函数。之后附加到数组的元素 回调不会访问对映射开始的调用

所以它似乎在说,虽然“添加到原始数组”的值不会被map遍历,但这意味着确实可以从map内部附加到原始数组。但是,我不知道该怎么做,因为简单地使用第三个数组参数并附加到它似乎没有什么作用(如果我将其存储到数组中,我不能只使用原始数组变量名,因为map返回一个全新的数组):

var myArr=[
1, 2, 3, 4, 5
].map(函数(x,i,arr){
this.push(i);//引用旧数组,因此不执行任何操作
arr.push(i);//似乎它应该调整
返回x;
},迈尔/*
试图使用“this”
arg以查看它是否有效,
虽然表面上看不出它的存在
*/
);
console.log(myArr)//仅返回原始值
Update 为了回答您的评论,
.map()
不是向数组中追加值的正确工具。当需要修改输入数组的每个元素时,应使用它,例如通过将每个值加倍:

var输入=[1,2,3,4,5];
var myArr=input.map(函数(x){
返回x*2;
});
迈尔推(6,7);//在单独的语句中追加值。
console.log(myArr);//[2,4,6,8,10,6,7]
然后在映射之前或之后的单独步骤中附加新值,具体取决于您想要实现的目标

解释 您的代码没有按预期的方式运行
console.log(myArr)
看起来像是在打印原始数组,但实际上不是。例如,如果您删除所有其他代码,您将保留以下代码:

var myArr=[1,2,3,4,5].map(函数(x){
返回x;
});
console.log(myArr);//[1,2,3,4,5]
您可以看到,我们只是返回
x
,没有做任何更改
x
将解析为
1
,然后依次解析为
2
,等等。因此,
.map()
的输出将是
[1,2,3,4,5]
,它包含与输入数组相同的值,但不是完全相同的数组,它是一个副本

您可以通过将输入数组移动到一个新变量中,然后在末尾比较
myArr===input
来证明这一点:

var输入=[1,2,3,4,5];
var myArr=input.map(函数(x){
返回x;
});
console.log(输入);//[1,2,3,4,5]
console.log(myArr);//[1,2,3,4,5]
console.log(myArr==输入);//假的
为了更进一步,如果我们使用
.map()
的第三个参数并将每个元素替换为其值的两倍,我们将看到原始
输入
数组确实得到修改,并且
.map()
的返回值保持不变

var输入=[1,2,3,4,5];
var myArr=input.map(函数(x,i,arr){
arr[i]=x*2;
返回x;
});
console.log(输入);//[2,4,6,8,10]
console.log(myArr);//[1,2,3,4,5]
console.log(myArr==输入);//假的
加分 仅仅因为您可以使用
.map()
的第三个参数修改原始数组,并不意味着您应该这样做。这样做可能会引入意外的行为,并使未来的开发人员更难对代码所做的事情进行推理

函数最好返回一个新变量,而不是改变输入参数。

Update 为了回答您的评论,
.map()
不是向数组中追加值的正确工具。当需要修改输入数组的每个元素时,应使用它,例如通过将每个值加倍:

var输入=[1,2,3,4,5];
var myArr=input.map(函数(x){
返回x*2;
});
迈尔推(6,7);//在单独的语句中追加值。
console.log(myArr);//[2,4,6,8,10,6,7]
然后在映射之前或之后的单独步骤中附加新值,具体取决于您想要实现的目标

解释 您的代码没有按预期的方式运行
console.log(myArr)
看起来像是在打印原始数组,但实际上不是。例如,如果您删除所有其他代码,您将保留以下代码:

var myArr=[1,2,3,4,5].map(函数(x){
返回x;
});
console.log(myArr);//[1,2,3,4,5]
您可以看到,我们只是返回
x
,没有做任何更改
x
将解析为
1
,然后依次解析为
2
,等等。因此,
.map()
的输出将是
[1,2,3,4,5]
,它包含与输入数组相同的值,但不是完全相同的数组,它是一个副本

您可以通过将输入数组移动到一个新变量中,然后在末尾比较
myArr===input
来证明这一点:

var输入=[1,2,3,4,5];
var myArr=input.map(函数(x){
返回x;
});
console.log(输入);//[1,2,3,4,5]
console.log(myArr);//[1,2,3,4,5]
安慰