2016-08-17 38 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