为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
输入:[1, 2, 3, 4]
输出:[1, 4, 9, 16]
var arr = [1, 2, 3, 4, 5];
console.log(square(arr));
这种方法对于有一定语言基础的人,可能是最容易想到的了,思路比较简单,直白。
第一种: for 遍历
function square(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr.push(arr[i] * arr[i]);
newArr[i] = Math.pow(arr[i],2);
}
return newArr;
}
// 第二种:map 遍历
function square(arr) {
return arr.map(e => e*e)
}
// 第三种:forEach
function square(arr) {
var newArr = [];
arr.forEach(element => {
return newArr.push(element*element)
});
return newArr;
}
// 第四种: for in
function square(arr) {
var newArr = [];
for(let i in arr){
newArr.push(arr[i] * arr[i])
};
return newArr;
}
// 第五种: for of
function square(arr) {
var newArr = [];
for(let i of arr){
newArr.push(arr[i] * arr[i])
};
return newArr;
}
// 输出结果为:[ 4, 9, 16, 25, NaN ]
我接着就打印了数组长度以及循环 i ,
function square(arr) {
var newArr = [];
console.log(arr.length); // 5
for(let i of arr){
console.log(i); // 1 2 3 4 5
newArr.push(arr[i] * arr[i])
};
return newArr;
}
问题就显而易见了, 的循环是从 1 开始,我们需要的是从 0 开始的, 改进 方式:将 改写为
function square(arr) {
var newArr = [];
for(let i of arr){
newArr.push(arr[i-1] * arr[i-1])
};
return newArr;
}
// 结果正确
以上分享是我个人所学心得,仅供参考;
不当之处,欢迎大家指点、交流。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删