我对javascript完全陌生。我是第一次学习如何编写函数,我一直被这个问题所困扰。请你帮我弄清楚为什么我的for循环只在数组的第一个元素上循环,而不是在其他元素上循环。
谢谢你的帮助。
参见代码:
我正在尝试编写一个函数,该函数以一个数字数组作为输入,并返回一个新数组,该数组包含输入数组中的每个数字,并加一。
function incrementEach (myArray) {
var newArray = [];
for (var i = 0; i < myArray.length; i++) {
newArray.push(myArray + 1);
return newArray;
};
};
var nuArray = incrementEach ([23, 34, 56, 67]);
log (nuArray);
The result I get after running this code is: '[24]'
只有阵列中的第一个元素被增加并打印。我的循环肯定出了问题,但我想不通。请帮帮我!
您的代码有几个问题:
- 在您的newArray.push调用中,您正在推送整个数组+1,而不是单个项+1
- 您在循环中返回,这意味着它根本不是一个循环,只运行一次
这是您的代码和修复到位:
function incrementEach (myArray) {
var newArray = [];
for (var i = 0; i < myArray.length; i++) {
newArray.push(myArray[i] + 1);
};
return newArray;
};
var nuArray = incrementEach ([23, 34, 56, 67]);
log(nuArray);
你也可以用更少的代码来使用地图功能:
var nuArray = [23, 34, 56, 67].map(function(item) {
return item + 1;
});
您需要从数组中获取元素:
newArray.push(myArray[i] + 1);
您可能想要
function incrementEach (myArray) {
var newArray = [];
for (var i = 0; i < myArray.length; ++i) {
newArray.push(myArray[i] + 1); // i-th element
}
return newArray; // Return at the end
}
然而,它会像这样更简单:
[23, 34, 56, 67].map(n => n+1);
var arr
function incrementEach (myArray) {
for (var i = 0; i < myArray.length; i++) {
myArray[i] += 1
};
return myArray
};
arr = incrementEach([23, 34, 56, 67]);
log(arr);
.map()
的最佳用例。它创建了一个新数组,其中包含对该数组中的每个元素调用所提供函数的结果。
var increased = [1, 2, 3].map(function(item, index) {
return item + 1;
});
一个函数可能看起来像:
function increaseValues(arr, amount) {
return arr.map(function(item) {
return item + amount;
});
}
// increase array values by 5
increaseValues([1,2,4], 5);
您访问的是数组本身,而不是正在循环的项。
在环路内使用newArray.push(myArray[i] + 1);
而不是newArray.push(myArray + 1);
此外,return
语句应该在for循环之外
演示