2012-06-20 15 views
10

這是所有在一個較大的程序的上下文,所以我會盡量保持簡單,只顯示違規行。我具有在字符串號碼形成一拉 「84」, 「32」 值的陣列,等等Node.JS/Javascript - 將字符串轉換爲整數返回NaN當我不期待它

然而,這種線

console.log(unsolved.length + " " + unsolved[0] + " " + parseInt(unsolved[0]) + " " + parseInt("84")); 

打印:

4 "84" NaN 84 

「84」是數組元素Im試圖parseInt!然而,除非我將它從數組的上下文中取出並明確寫入,否則它將不起作用。這是怎麼回事?

+4

不'未解[0]'包括在其實際值的雙引號? – 2012-06-20 13:44:22

+1

'unsolved [0]'的值似乎是''「84'''而不是''84'' – Esailija

+0

它確實 - 這一定是問題所在,我認爲 – PinkElephantsOnParade

回答

11

你可以嘗試刪除字符串中的報價來使用此功能進行處理:

function stripAlphaChars(source) { 
    var out = source.replace(/[^0-9]/g, ''); 

    return out; 
} 

而且應明確指定要分析基地10號:

parseInt(unsolved[0], 10); 
+0

使用了這個 - 將返回值更改爲m_strOut: ) – PinkElephantsOnParade

+0

好抓。剛編輯它。 –

7

parseInt將採取一切從它看起來像一個數字的論點的開始,並無視其餘的。在你的情況下,你調用的參數從"開始,所以沒有看起來像一個數字,它試圖投射一個空字符串,這實際上不是一個數字。

3

你應該確保數組元素確實是一個可以解析爲數字的字符串。你的數組元素不包含價值'84',但實際上價值'"84"'(含「封裝了一些字符串)

你要刪除的"從你的數組元素,可能是這樣的:

function removeQuotationMarks(string) { 
    return (typeof string === 'string') ? string.replace(/"|'/g, '') : string; 
} 

unsolved = unsolved.map(removeQuotationMarks); 

現在所有的數組元素應該準備與parseInt(unsolved[x], 10)

+0

非常努力:) –

0

首先進行解析,我們需要使用正則表達式來取代「到」屈服數據和替換,然後我們需要轉換。

var i = 1; 
 
var j = "22" 
 
function stringToNumber(n) { 
 
    return (typeof n === 'string') ? parseInt(Number(n.replace(/"|'/g, ''))) : n; 
 
} 
 

 
console.log(stringToNumber(i)); // 1 
 
console.log(stringToNumber(j)); // 22