2012-11-22 28 views
5

cụ thể tôi có chuỗi này:jQuery: Truy cập tổng của một chuỗi các số với ngày tháng và chữ

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

Chuỗi được chia thành 3 loại.

  1. ngày (dd/mm/yyyy)
  2. Số
  3. Character

như sau: 07-09-2012 73 ABC

Tôi muốn để có được tổng của số, ngày tháng là 09 và có ký tự ABC.

Hiện nay, từ một câu hỏi khác tôi phát hiện ra làm thế nào để lấy lại chỉ ngày, khi chuỗi không có ký tự Ví dụ: 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"]) 

Bây giờ làm thế nào tôi có thể làm điều tương tự, nhưng lấy tổng của một ngày hoặc tháng cụ thể, với ký tự cụ thể.

Đây là fiddle hiện tại của tôi với chuỗi: http://jsfiddle.net/javascript/pBNNt/8/

Cái gì như: results["09/2012,ABC"]

+0

những gì bạn muốn làm, làm thế nào để u muốn chọn đầu vào của bạn? –

+0

Hiện tại nếu bạn kiểm tra điều này: http://jsfiddle.net/javascript/pBNNt/10/ Tôi nhận được tổng của tất cả các số có tháng cụ thể. Bây giờ, tôi muốn lấy tổng của tất cả các số có tháng VÀ ký tự cụ thể. – ClydeM

+0

tôi nghĩ bạn nên sử dụng regex để khớp với mẫu bạn muốn, chỉ cần chuyển regex làm đầu vào –

Trả lời

3

Làm thế nào về điều đó:

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

Đẹp. Cảm ơn bạn – ClydeM

+0

@ClydeM Bạn được chào đón! – VisioN

+0

Tôi có thể lấy tổng số ngày cụ thể cho tất cả các nhân vật không? Vì vậy, về cơ bản tổng số tiền của 09-2012 – ClydeM

Các vấn đề liên quan