使用forEach

时间:2016-12-30 10:29:30

标签: arrays foreach mutate

我的任务是编写一个forEach方法,该方法可以改变数组中每个元素的字符串值。

以下是一个例子:

candy = ['snickers', 'mars', 'three muskateers']

candy.forEach(function(e){
  e.toUpperCase());
});

我通过控制台日志记录测试了forEach,看起来我得到了我想要的返回值。

candy.forEach(function(e){
  console.log(e.toUpperCase());

然而,当我打印数组以确认原始数组已经改变时,我得到原始数组。

console.log(candy);

这与字符串有关系是原始数据类型吗?有人可以帮我更好地理解吗?

3 个答案:

答案 0 :(得分:0)

在您的情况下,原始数组不会被修改。

您需要创建一个单独的数组,并将大写值存储在单独数组中的每个数组中。

您的代码(已修改):

candy = ['snickers', 'mars', 'three muskateers']
var candyModified = Array();
candy.forEach(function(e){
    candyModified.push(e.toUpperCase());
});
console.log(candyModified);

答案 1 :(得分:0)

当您尝试打印candy数组时,您没有收到任何更改,因为mapforEach函数都不会影响/修改原始数组。

使用 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不修改原始数组,如果您希望更改原始数组,可以通过分配修改后的数组来实现。 mapcandy变量起作用。

candy = ['snickers', 'mars', 'three muskateers'];

candy = candy.map(v => v.toUpperCase());

console.log(candy);
.as-console-wrapper { max-height: 100% !important; top: 0; }

注意,如果您在此使用forEachconsole.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本身。像这样:

方法1 - 第3次arg



candy = ['snickers', 'mars', 'three muskateers']

candy.forEach(function(el, i, arr){
  arr[i] = el.toUpperCase();
});

console.log(candy);




方法2 - 使用candy



candy = ['snickers', 'mars', 'three muskateers']

candy.forEach(function(el, i){
  candy[i] = el.toUpperCase();
});

console.log(candy);