2012-11-22 10 views
5

一串数字的总和访问我有这个字符串:jQuery的:与特定的日期和文字

var result = "/07-09-2012 73 ABC/11-09-2012 195 DEF/ 03-09-2012 95/04-09-2012 188 ABC/31-10-2012 72/18-09-2012 205/26-09-2012 244 ABC/14-09-2012 86/20-09-2012 92 DEF/28-09-2012 97/01-09-2012 95 DEF/ 17-09-2012 95/17-09-2012 83/12-09-2012 95/18-09-2012 95 ABC/18-09-2012 69/21-09-2012 95/21-09-2012 95 ABC/ 24-09-2012 144/28-09-2012 93 DEF"; 

该字符串在3个类别划分。

  1. 日期(日/月/年)

这样的:2012年7月9日73 ABC

我想要得到的总和数字,其中日期是09年,并具有字符ABC。

目前,从另一个问题,我发现了如何检索刚刚日期,当字符串没有字符 例子:http://jsfiddle.net/javascript/pBNNt/10/

var result = "/07-09-2012 73/11-09-2012 195/03-09-2012 95/04-09-2012 188/31-10-2012 72/18-09-2012 205/26-09-2012 244/14-09-2012 86/20-09-2012 92/28-09-2012 97/01-09-2012 95/17-09-2012 95/17-09-2012 83/12-09-2012 95/18-09-2012 95/18-09-2012 69/21-09-2012 95/21-09-2012 95/24-09-2012 144/28-09-2012 93"; 

var resultArr = result.split('/'); 
var results = {}; //sum by month 
for (var i = 0; i < resultArr.length; i++) {  
    if (resultArr[i].length >= 11) { //it has date 
     var resultTkn = resultArr[i].split(' '); 

     if (resultTkn[1].length == 10) { //it is a date 
      var date = resultTkn[1].split('-'); 
      var sum = 0; 
      if (results.hasOwnProperty(date[1])) { 
       sum = results[date[1]]; 
      } 

      sum += parseFloat(resultTkn[2]); 
      results[date[1]] = sum; 
     } 
    } 
} 
$('div').text(results["09"]) 

现在我该怎么做,但检索特定日期或月份与特定字符的总和。

这是我目前的拨弄字符串:http://jsfiddle.net/javascript/pBNNt/8/

喜欢的东西:results["09/2012,ABC"]

+0

你想要什么做,你想如何选择你的输入? –

+0

目前如果您选中:http://jsfiddle.net/javascript/pBNNt/10/我会得到所有数字与特定月份的总和。现在,我想获得具有特定月份和字符的所有数字的总和。 – ClydeM

+0

我认为你应该使用正则表达式来匹配你想要的模式,只需通过正则表达式作为输入 –

回答

3

怎么样:

function search(result, cat) { 
    var data = [], 
     lines = result.split(/\s*\/\s*/); 
    for (var i = 0; i < lines.length; i++) { 
     if (lines[i] === "") continue; 
     var s = lines[i].split(/\s+/); 
     data.push({ 
      date: s[0], 
      number: parseInt(s[1], 10) || 0, 
      char: s[2] || "" 
     }); 
    } 

    var num = 0; 
    for (var j = 0; j < data.length; j++) { 
     if ((cat.char && data[j].char === cat.char) && 
      (cat.date && data[j].date.indexOf(cat.date) !== -1)) { 
      num += data[j].number; 
     } 
    } 
    return num; 
} 

var result = "/07-09-2012 73 ABC/11-09-2012 195 DEF/ 03-09-2012 95/04-09-2012 188 ABC/31-10-2012 72/18-09-2012 205/26-09-2012 244 ABC/14-09-2012 86/20-09-2012 92 DEF/28-09-2012 97/01-09-2012 95 DEF/ 17-09-2012 95/17-09-2012 83/12-09-2012 95/18-09-2012 95 ABC/18-09-2012 69/21-09-2012 95/21-09-2012 95 ABC/ 24-09-2012 144/28-09-2012 93 DEF"; 

var total = search(result, { 
    char: "ABC", 
    date: "-09-2012" 
}); 

console.log(total); 

DEMO:http://jsfiddle.net/pBNNt/12/

+0

美丽。谢谢 – ClydeM

+0

@ClydeM不客气! – VisioN

+0

是否有可能我可以得到所有角色的特定日期的总和?所以基本上总计09-2012 – ClydeM