2015-12-01 148 views
0

我想要一串數字和字符並將數字相加。在字符串中添加數字

例如:「2015年,我想知道iPhone 6+的價格是多少?」

輸出:2021

這裏是我當前的代碼:

var str = "In 2015, I want to know how much does iPhone 6+ cost?"; 

function sumFromString(str){ 
    var punctuationless = str.replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>[email protected]\[\\\]\^_`{|}~']/g,""); 
    var finalString = punctuationless.replace(/\s{2,}/g," "); 
    var StringList = finalString.split(" "); 
    var sum = []; 
    for (i = 0; i < StringList.length; i++) 
    if (isInt(StringList[i]) 
     sum.add(StringList[i]); 
    sum.reduce((prev, curr) => prev + curr); 
} 
sumFromString(str); 

我的代碼將一個字符串條標點符號的,然後每個單詞/數字放入數組,StringList的。

我不能得到下一部分的工作。

我試過的是迭代數組中的每個值。 if語句應該檢查數組元素是否是整數。如果是這樣,它會將整數添加到名爲sum的空數組中。然後,我將數組的所有值,sum加起來。

+0

爲什麼不直接搜索所有數字的字符串? – miken32

+0

當您添加時,您是否將它轉換爲數字? 'sum.add(+ StringList [i])' –

+2

'var matches = str.match(/ \ d +/g); var sum = matches.reduce((prev,curr)=> prev + curr);' – miken32

回答

3

簡單多了:

function sumFromString(str) { 
    return (str.match(/\d+/g)||[]).reduce((p,c)=>+c+p); 
} 

請特別注意,我用+c+p - +c從串的電流值轉換爲一數,然後將它添加到p。這匹配了字符串中的所有數字 - 如果沒有空數組,則會獲得一個空數組,並減少該數組。

0

使用split函數將字符串拆分爲所有字符的數組,然後運行filter函數獲取所有數字。使用map函數遍歷所有包含數字的元素,並從中刪除非數字的字符。

然後用reduce得到所有數字的總和。由於我們在這裏處理字符串,我們必須執行type conversion將它們轉換爲數字。

string.split(' ').filter(function(word) { 
    return /\d+/.test(word) } 
}).map(function(s) { 
    return s.replace(/\D/, '') 
}).reduce(function(a,b) { 
    return Number(a) + Number(b); 
}); 
1

對於各種各樣的緣故,這裏有一個辦法做到這一點沒有正則表達式:

var myString = "5 bunnies ate 6 carrots in 2days."; 
var myArray = myString.split(''); 
var total = 0; 
for (var i = 0; i < myArray.length; i++) { 
    if (!isNaN(parseInt(myArray[i]))) { 
    total += parseInt(myArray[i]); 
    } 
} 

Fiddle Demo

注:如果有機會的myString可能是零,你會希望在分割前添加檢查。