分享题解05:数组元素的平方(数组遍历的方法)

描述

为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组

示例

输入:[1, 2, 3, 4]
输出:[1, 4, 9, 16]

代码输入:
var arr = [1, 2, 3, 4, 5];
console.log(square(arr));
解法一:for遍历

这种方法对于有一定语言基础的人,可能是最容易想到的了,思路比较简单,直白。

第一种: 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 遍历
// 第二种:map 遍历
function square(arr) {
    return arr.map(e => e*e)
}
解法三:利用 for Each遍历
// 第三种:forEach
function square(arr) {
    var newArr = [];
    arr.forEach(element => {
        return newArr.push(element*element)
    });
    return newArr;
}
解法四:利用 for in 遍历
// 第四种: for in
function square(arr) {
    var newArr = [];
    for(let i in arr){
        newArr.push(arr[i] * arr[i])
    };
    return newArr;
}
解法四:利用 for of 遍历
// 第五种: 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;
}

问题就显而易见了,for of 的循环是从 1 开始,我们需要的是从 0 开始的,改进方式:将 i 改写为 i - 1

function square(arr) {
    var newArr = [];
    for(let i of arr){
        newArr.push(arr[i-1] * arr[i-1])
    };
    return newArr;      
}
// 结果正确
总结
  • 之前又一遍博客也讲述了循环的方式,提及了 inof 的区别,但是理解的比较简单,也没有仔细比较他们的差别,今天这个题目对遍历有一个较为不错的对比 。
  • 关于 inof的用法,还是推荐对于数组(类数组)使用 in,对于对象使用 of,这么做也是根据他们索引值的起始值不同进行的区分。
  • 想到了之前的一个面试题: inof 的区别,当时解答说的是没啥区别,现在看来或许答案就在此处。

以上分享是我个人所学心得,仅供参考;
不当之处,欢迎大家指点、交流。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值