我的任务是编写一个forEach方法,该方法可以改变数组中每个元素的字符串值。
以下是一个例子:
candy = ['snickers', 'mars', 'three muskateers']
candy.forEach(function(e){
e.toUpperCase());
});
我通过控制台日志记录测试了forEach,看起来我得到了我想要的返回值。
candy.forEach(function(e){
console.log(e.toUpperCase());
然而,当我打印数组以确认原始数组已经改变时,我得到原始数组。
console.log(candy);
这与字符串有关系是原始数据类型吗?有人可以帮我更好地理解吗?
答案 0 :(得分:0)
在您的情况下,原始数组不会被修改。
您需要创建一个单独的数组,并将大写值存储在单独数组中的每个数组中。
您的代码(已修改):
candy = ['snickers', 'mars', 'three muskateers']
var candyModified = Array();
candy.forEach(function(e){
candyModified.push(e.toUpperCase());
});
console.log(candyModified);
答案 1 :(得分:0)
当您尝试打印candy
数组时,您没有收到任何更改,因为map
和forEach
函数都不会影响/修改原始数组。
使用 forEach
:
candy = ['snickers', 'mars', 'three muskateers'];
console.log(candy.forEach(v => v.toUpperCase()));
console.log(candy);
使用 map
功能:
candy = ['snickers', 'mars', 'three muskateers'];
console.log(candy.map(v => v.toUpperCase()));
console.log(candy);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Hovewer,您可以注意到forEach
函数返回undefined
因为forEach
没有返回任何内容。它只是对数组执行给定的操作,而map
函数返回带有修改元素的全新数组。
由于forEach
函数以及map
不修改原始数组,如果您希望更改原始数组,可以通过分配修改后的数组来实现。 map
对candy
变量起作用。
candy = ['snickers', 'mars', 'three muskateers'];
candy = candy.map(v => v.toUpperCase());
console.log(candy);
.as-console-wrapper { max-height: 100% !important; top: 0; }
注意,如果您在此使用forEach
,console.log(candy)
将返回undefined
。
candy = ['snickers', 'mars', 'three muskateers'];
candy = candy.forEach(v => v.toUpperCase());
console.log(candy);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
要修改它,您必须使用forEach
的第三个参数或使用candy
本身。像这样:
candy = ['snickers', 'mars', 'three muskateers']
candy.forEach(function(el, i, arr){
arr[i] = el.toUpperCase();
});
console.log(candy);

candy
candy = ['snickers', 'mars', 'three muskateers']
candy.forEach(function(el, i){
candy[i] = el.toUpperCase();
});
console.log(candy);