用js中数组Array的reduce方法制作一个简单的计算机

这是css部分,当时写的有点仓促代码没有格式化,当然这不是本文的重点(哈哈)

 <style>
        *{margin: 0px;padding:0px;box-sizing: border-box;}
        ul li{list-style:none;}
        div.box{width: 300px;height:400px;padding:10px;border:1px solid #123456;}
        div.screen{width:280px;height:50px;border:1px solid gray;text-align: center;
        line-height: 50px;}
        div.key{width:280px;height:300px;margin:12px 0px;border:1px solid gray;}
        div.key div.function{display:flex;justify-content: space-around;align-items: center;}
        div.math ul,div.num{display:flex;justify-content: space-around;align-items: center;}
        div.math{flex:2 1 auto;}
        div.clear,div.get{width:80px;height:40px;}
        div.clear,div.get,div.math ul li{border:1px solid gray;}
        div.math ul li{width:30px;height:30px;}
        div.math ul li:nth-child(odd){margin:10px;}
        div.num{margin-top:15px;}
        div.key,div.clear,div.get{margin-top:10px;}
        div.clear,div.get{font-size: 24px;text-align: center;line-height: 40px;}
        div.get{font-size:45px;line-height: 35px;}
        div.num .math ul li{font-size:24px;text-align: center;line-height: 30px;}
        div.screen p{font-size: 18px;}
        div.clear,.get,.math ul li{cursor:pointer;}
    </style>

这是结构部分

<body>
    <div class="box">
        <div class="screen">
            <p id="content">内容</p>
        </div>
        <div class="key">
            <div class="function">
                <div class="clear">清除</div>
                <div class="get">=</div>
            </div>
            <div class="num">
                <div class="math">
                    <ul>
                        <li>1</li>
                        <li>2</li>
                        <li>3</li>
                        <li>+</li>
                    </ul>
                    <ul>
                        <li>4</li>
                        <li>5</li>
                        <li>6</li>
                        <li>-</li>
                    </ul>
                    <ul>
                        <li>7</li>
                        <li>8</li>
                        <li>9</li>
                        <li>*</li>
                    </ul>
                    <ul>
                        <li>*</li>
                        <li>0</li>
                        <li>#</li>
                        <li>/</li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
</body>

下面是这篇文章的重点,js部分用到了Array的reduce、slice和join方法;当然这只是自己随便练习的有些的不好的地方请大家多多指正。

<script>
   let liNode = document.querySelectorAll("div.math ul li");
   let conNode = document.getElementById("content");
   let getNode = document.querySelector("div.get");
   let clearNode = document.querySelector("div.clear")
   let contentNode = document.querySelector("#content");
    let [...liArray] = liNode;
    [...liArray].map(function(value,index,array){
            value.addEventListener("click",()=>{
                //调用函数
                set(value.innerHTML);
            });
    });
    //将结果渲染到页面
    getNode.addEventListener("click",()=>{
        contentNode.innerHTML = get();
    });
    //回到初始状态
    clearNode.addEventListener("click",()=>{
        obj.arr=[];
        contentNode.innerHTML = "";
    });
    //存放数据
    let obj = {
        arr:[]
    };
    //得到结果
    let result=0;
    function get(){
        obj.arr.reduce((per,value,index,arr)=>{
            if(typeof value !="number"){
                let newarr = arr.slice(0,index).join("")*1;
                let lastNode = arr.slice(index+1).join("")*1;
                switch (value) {
                    case "+":
                        result = newarr + lastNode;
                        console.log(result);
                        break;
                    case "-":
                        result = newarr - lastNode;
                        console.log(result);
                        break;
                    case "*":
                        result = newarr * lastNode;
                        console.log(result);
                        break;
                    case "/":
                        result = newarr / lastNode;
                        console.log(result);
                        break;
                };
            };
        });
        return result;
    };
    // get();
    //传入值
    function set(val){
        obj.arr.push(val);
    };
</script>

本来想用js对象的属性访问器来做的,奈何自己还不太明白。如果有会的希望可以教教我,在这先感谢各位了,对了我对模块还是不太理解,真心希望有人能教教我。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值