我从一周开始学习 Javascript,并尝试对循环进行一些练习,因此我尝试创建一个函数,每次调用它时,我都会将数组中的数字加倍。
我设法用经典的“for”循环来做到这一点,如下所示:
var numbers = [2, 5, 37, 500, 75];
function getDoubled() {
for (var i = 0; i < numbers.length; i++) {
(numbers[i] = numbers[i] * 2);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每次调用该函数时,数组中的数字都会翻倍getDoubled();,现在我尝试对方法执行相同的forEach操作。
var numbers = [2, 5, 37, 500, 75];
function getDoubled(array) {
array.forEach(function(number) {
(number = number * 2);
})
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用该函数时,我无法更改数组getDoubled(numbers),但是如果我使用 进行测试console.log(number*2),它会在控制台中工作,所以我无法找出错误。
重新分配标识符没有副作用。也就是说,someVariable = somethingNew只有当其他东西引用其中someVariable具有新值的 时,才会导致脚本的运行方式发生明显的变化。在这里,number = number * 2不执行任何操作,因为没有任何内容引用双倍number变量;重新分配参数不会对数组执行任何操作。
执行此操作的方法forEach是重新分配数组中的索引,就像在for循环中一样。
var numbers = [2,5,37,500,75];
function getDoubled(array) {
array.forEach(function(number, i){
array[i] = number * 2;
})
}
getDoubled(numbers);
console.log(numbers);Run Code Online (Sandbox Code Playgroud)
或者,更好的方法是使用更改后的值构造一个新数组,这可以使用 完成.map,它通过对原始数组的每个元素执行回调来创建一个新数组 - 这样您就不必查看获得所需输出的(不重要的)索引。
var numbers = [2,5,37,500,75];
function getDoubled(array) {
return array.map(num => num * 2);
}
console.log(getDoubled(numbers));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |