jQuery: Access sum of a string of numbers with specific date and text

javascript, jquery, string, sum

Solution

How about that:

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/

Problem

I have this string: ``` 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"; ``` The string is divided in 3 categories. - Date (dd/mm/yyyy) - Number - Character thus: 07-09-2012 73 ABC I want to get the sum of number, where date is 09 and has character ABC. Currently, from another question I found out how to retrieve just the date, when string has no characters Example: 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"]) ``` ​ Now how can I do the same, but retrieve the sum of a specific date or month, with the specific character. Here is my current fiddle with the string: http://jsfiddle.net/javascript/pBNNt/8/ Something like: `results["09/2012,ABC"]`

Original source