面试题:前端js将二维数组中有0的行和列都设置为0

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

今天去一家外企公司面试,不加班不打卡年假15天的公司。然后除了一道现场敲代码的题,时间很短可能只有20分钟,当时面试紧张脑袋短路没有写出所有步骤,现在后悔莫及,然后回家自己慢慢又敲了一遍就出来了。


一、题目

let arr = [
            [0, 1, 1],
            [1, 1, 2],
            [1, 0, 3],
            [4, 1, 5],
        ]

要求:第二层数组中有0的话那他的行列全部设置为0
例:

// 最后结果为
[[0, 0, 0]
[0, 0, 2]
[0, 0, 0]
[0, 0, 5]]

二、个人思路

function filterArr(arr) {
            let newArr = JSON.parse(JSON.stringify(arr))
            for (let i = 0; i < arr.length; i++) {
                if (arr[i].includes(0)) {
                    for (let j = 0; j < newArr[i].length; j++) {
                        newArr[i][j] = 0
                    }
                }
                for(let j = 0; j < arr[i].length; j++){
                    if (arr[i][j] === 0) {
                        for(let k = 0; k < newArr.length; k++) {
                            newArr[k][j] = 0
                        }
                    }
                }

            }
            return newArr
        }
        filterArr(arr)

总的思路是先去复制一份一样的数组。然后在老数组上判断,在新数组上更改,最后返回出新数组。
先for循环老数组,然后在老数组上循环每一项includes(0)的时候就再循环新数组,把新数组的那一行都设置为0。
然后再for循环老数组里面的数组拿到他们值为0的索引,最后再循环新数组在每一列为j的索引给设置成0。

总结

面试的时候放轻松,平时多做点题。遇到这些面试要写题的,太久不写题真不一定能立马写出来。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值