这是我在做算法题是遇到的关于for of的一个问题

这是我在做算法题是遇到的关于for of的一个问题

var findDisappearedNumbers = function (nums) {
    // 将遍历到的项放回该去的地方,当该去的地方已经有对应数,将当前数的下标+1放入数组
    const res = []
    for (let [i, num] of nums.entries()) {
        while (num !== i + 1 && nums[num - 1] !== num) {
            swap(nums, i, num - 1)
            console.log(i, num);
        }
    }
    for (const [i, num] of nums.entries()) {
        if (num !== i + 1) res.push(i + 1)
    }

    return res

    function swap(nums, index1, index2) {
        const temp = nums[index1]
        nums[index1] = nums[index2]
        nums[index2] = temp
    }
};
nums = [4, 3, 2, 7, 8, 2, 3, 1]
console.log(findDisappearedNumbers(nums));

问题描述:

while并没有像我想的那样一直执行,当把for of换成for 就可以完成while,请问是为什么

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
樱桃小胖子 2022-05-09 13:49:38

同学你好,这道算法题的题目要求是什么?需要根据题目要求来解决代码的相关问题。

祝学习愉快!

  • 提问者 weixin_慕妹6328942 #1

    448. 找到所有数组中消失的数字

    就是for of 循环里的while为什么不会像for里面原地循环直到符合条件再跳出而是都只执行一次

    2022-05-09 22:26:41
  • 同学你好,这个问题属实难到十二了,但初步猜测是跟for of的特性有关系(for of会在可迭代对象上创建一个迭代循环,调用迭代钩子,并为每个不同属性的值执行语句)。另外同学这段代码的输出结果是[1,5,6,7],这是不正确的,正确应该输出[5,6],原因是while中的条件书写有误,可以参考如下设置:

    https://img1.sycdn.imooc.com//climg/627b5919091fd29b10110682.jpg

    希望可以帮到你,祝学习愉快!

    2022-05-11 14:36:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师