题解 | #双色球机选一注#

双色球机选一注

https://www.nowcoder.com/practice/4d712994d0364a159f8169b7b0e74d04

function randomFn() {
    //返回生成
    function create(max, cnt) {//生成随机数的最大值,生成数字的个数,以数组形式返回
        let arr = new Array(max).fill(0).map((_, idx) => (idx + 1) < 10 ? `0${idx + 1}` : `${idx + 1}`);
        let ans = [];
        for (let i = 0; i < cnt; i++) {
            let idx = Math.floor(Math.random() * max);//0-32
            ans.push(arr[idx]);
            arr.splice(idx, 1);
            max -= 1;
        }
        ans.sort();//排序
        return [ans, arr];
    }
    let red = create(33, 6);
    let blue = create(16, 1);
    let res = red[0].join(',') + '|' + blue[0][0];

    //效果实现,请使用原生JavaScript操作DOM元素,不要增加、删除DOM元素或修改css
    let rwrap = document.getElementsByClassName('red')[0].children[1].children;
    let bwrap = document.getElementsByClassName('blue')[0].children[1].children;
    function changePlace(k, arrayLike, target, rest) {//需要替换的数字个数、节点类数组、剩余数字的数组
        let idx = 0;
        while (idx < k) {
            arrayLike[idx].classList.add('active');
            arrayLike[idx].innerHTML = target[0][idx];
            idx++;
        }
        for (let i = idx, j = 0; i < arrayLike.length; i++, j++) {
            arrayLike[i].innerHTML = rest[j];
        }
    }
    changePlace(6, rwrap, red, red[1]);
    changePlace(1, bwrap, blue, blue[1]);
    return res;
}

关键在于不添加或者删除节点,测试用例应该会测试引用是否变化,所以只能替换掉innerHTML。另外代码也出错过一次,可能有些没预料的错误。

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-19 10:38
实力求职者:真的绷不住了,第一张霸总人设,第二张求生欲拉满
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务