2016-08-17 31 views
0

我试图使用JavaScript编写这个算法,但我得到一个str.length不是一个函数...提取字符串中间 - JavaScript的

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"); 
+3

及其'str.length'不'str.length()' –

+0

字符串长度是一个属性不是方法。所以使用str.length – twothreebrent

+0

雅属性,而不是函数。 –

回答

3

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

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")); 
0

str.length是一个属性。只是摆脱括号。例如:

if (str.length == 44) { 
0

这似乎解决了它!

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/

0

length是字符串的一个属性,而不是功能。做到这一点,而不是:

str.length % 2 === 1

此外,使用我建议过==

0

// the most amazing 
 

 
const getMiddle = s => s.substr(s.length - 1 >>> 1, (~s.length & 1) + 1);

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

//关于〜运算符,让我们从表达式开始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)个字符。

@author通过jacobb

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

+0

嗨,约翰,这是从某处复制并粘贴的?你可以在你的答案中添加一个链接到源代码。 – Pang