繁体   English   中英

提取字符串中间 - JavaScript

[英]Extracting middle of string - JavaScript

我试图在 JavaScript 中为此编写一个算法,但我得到的 str.length 不是 function...

function extractMiddle(str) {

    var position;
    var length;

    if(str.length() % 2 == 1) {
        position = str.length() / 2;
        length = 1;
    } else {
        position = str.length() / 2 - 1;
        length = 2;
    }

    result = str.substring(position, position + length)

}

extractMiddle("handbananna");

因为字符串长度不是一个函数,它是一个属性。

 function extractMiddle(str) {

        var position;
        var length;

        if(str.length % 2 == 1) {
            position = str.length / 2;
            length = 1;
        } else {
            position = str.length / 2 - 1;
            length = 2;
        }

        return str.substring(position, position + length)
    }

    console.log(extractMiddle("handbananna"));

这是执行此操作的另一种方法:

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

 // the most amazing const getMiddle = s => s.substr(s.length - 1 >>> 1, (~s.length & 1) + 1); // should return "dd" console.log(getMiddle('middle'))

// >>> 是无符号右移按位运算符。 它相当于除以 2,截断,只要字符串的长度不超过 Javascript 中整数的大小。

// 关于 ~ 运算符,让我们从表达式 n & 1 开始。这将告诉您整数 n 是否为奇数(它类似于逻辑与,但比较两个数字的所有位)。 如果整数为奇数,则表达式返回 1。 如果整数是偶数,则返回 0。

// 如果 n & 1 是偶数,则表达式返回 0。

// 如果 n & 1 是奇数,则表达式返回 1。

// ~n & 1 反转这两个结果,如果字符串的长度是奇数,则提供 0,如果字符串的长度是偶数,则提供 1。 ~ 运算符将整数中的所有位取反,因此 0 将变为 -1,1 将变为 -2,依此类推(前导位始终是符号)。

// 然后加一,如果字符串的长度是奇数,则得到 0+1 (1) 个字符,如果字符串的长度是偶数,则得到 1+1 (2) 个字符。

@作者 雅各布

源码链接是: https : //codepen.io/jacobwarduk/pen/yJpAmK

这似乎解决了它!

function extractMiddle(str) {

var position;
var length;

if(str.length % 2 == 1) {
    position = str.length / 2;
    length = 1;
} else {
    position = str.length / 2 - 1;
    length = 2;
}

result = str.substring(position, position + length)
    console.log(result);

}

https://jsfiddle.net/sd4z711y/

第一个'if'语句是得到奇数,而'else if'是得到偶数。

 function getMiddle(s) { if (s.length % 2 == 1) { return s.substring((s.length / 2)+1, (s.length / 2)) } else if (s.length % 2 == 0) { return s.substring((s.length / 2)-1, (s.length / 2)+1) } } console.log(getMiddle("handers")); console.log(getMiddle("test"));

这是我的解决方案:-

这是我的解决方案

function getMiddle(s){

let middle = Math.floor(s.length/2);

return s.length % 2 === 0
    ? s.slice(middle-1, middle+1)
    : s.slice(middle, middle+1);
}
function extractMiddle(s) {
  return s.substr(Math.ceil(s.length / 2 - 1), s.length % 2 === 0 ? 2 : 1);
}

extractMiddle("handbananna");

str.length 是一个属性。 只需去掉括号即可。 示例:

if (str.length == 44) {

length是字符串的属性,而不是函数。 改为这样做:

str.length % 2 === 1

另外,使用我建议偏爱===不是==

由于 length 不是函数,因此无需使用 ()。

function getMiddle(str) {  
 if(str.length % 2 === 0 ) {   
 return str.substr(str.length/2-1, 2);  
 } else {  
  return str.charAt(Math.floor(str.length/2));      
 }     
}  

console.log(getMiddle("middbkbcdle"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM