javascript - 关于js算法题
PHPz
PHPz 2017-04-11 13:15:12
[JavaScript讨论组]
var p1 = getMiddle("test"); //es
    var p2 = getMiddle("testing"); //t
    var p3 = getMiddle("middle"); //dd
    var p4 = getMiddle("A"); //A

        function getMiddle(str){
            return str.substr(Math.ceil(str.length / 2 - 1) , str.length % 2 == 0 ? 2 : 1);
        }

        console.log(p1);
        console.log(p2);
        console.log(p3);
        console.log(p4);

如果是字符串是偶数的话,返回中间2个字母,如果奇数的话返回中间一个字母,
问题:这里的str.length / 2 为什么要-1?

PHPz
PHPz

学习是最好的投资!

全部回复(3)
ringa_lee

因为索引号是从0开始算的。。。

比如字符串length=2
Math.ceil(str.length / 2 - 1) => Math.ceil(0) => 0 即从索引号0开始截取
比如字符串length=3
Math.ceil(str.length / 2 - 1) => Math.ceil(0.5) => 1 即从索引号1开始截取

天蓬老师

因为下标从0开始。
比如“middle”,str.length/2 = 3, 如果不减一的话取到的就是“dl”。

黄舟

substr有两个参数,就是‘从第几个开始’ 和 ‘往后取几位数’
Math.ceil(str.length / 2 - 1)就是第一个参数,即从第几个开始取。如果为偶数,则取字符串长度的一半的前面一个数开始(如abcd则从b开始),如果是奇数则去中间数开始(如abc则从b开始)。
str.length % 2 == 0 ? 2 : 1就是第二个参数,三元运算。str.length % 2是不是为0.是的话就是2不是的话就是1.意思就是如果字符串长度为偶数。则往后取两位数。如果字符串长度为奇数,则往后取一位数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号