2016-06-13 8 views
-3

auf dem inputArray Basierend ich will output erstellen, Marken Berechnungen in output wie unterGruppe weise Summe in Javascript-Objekt-Array

Gruppe 1 = Physik + Chemie + Mathe

Gruppe 2 = History + Geographie

Gruppe 3 = Sprache First + Sprache Zweite

Gruppe Total = Gruppe 1 + Gruppe 2 + Gruppe 3

var inputArray = [ 
    { subject: 'Physics', marks: '60' }, 
    { subject: 'History', marks: '35' }, 
    { subject: 'Chemistry', marks: '50' }, 
    { subject: 'Language First', marks: '70' }, 
    { subject: 'Geography', marks: '65' }, 
    { subject: 'Maths', marks: '40' }, 
    { subject: 'Language Second', marks: '50' }, 
    . 
    . 
    . 
]; 

var outputArray = [ 
    { subject: 'Group 1', marks: '150' }, 
    { subject: 'Group 2', marks: '100' }, 
    { subject: 'Group 3', marks: '120' }, 
    { subject: 'Group Total', marks: '370' }, 
    . 
    . 
    . 
]; 
+1

Es scheint, Sie zu i vergessen Nimm eine Frage in deine Frage auf. – Biffen

+0

Frage bearbeitet .. – SBP

+0

Und noch keine * Frage * ... – Biffen

Antwort

0

Sie können diesen Code erhalten mit:

for(var i in inputArray){ 
    if(inputArray[i].subject == "Physics" || inputArray[i].subject == "Chemistry" || inputArray[i].subject == "Maths") 
     outputArray[0].marks+= Number(inputArray[i].marks); 

    else if(inputArray[i].subject == "History" || inputArray[i].subject == "Geography") 
     outputArray[1].marks+= Number(inputArray[i].marks); 

    else if(inputArray[i].subject == "Language Second" || inputArray[i].subject == "Language First") 
     outputArray[2].marks+= Number(inputArray[i].marks); 

} 

jsFiddle

Hoffe, es hilft :)

0

Dieser Vorschlag mit einem Objekt arbeitet, eine als Bezug auf Subjekt der Gruppe und ein anderer zur Referenz auf die Ergebnismenge.

Zuerst wird die Ergebnismenge basierend auf den gewünschten Gruppen erstellt. In dieser Schleife wird die Referenz generiert.

Zweitens wird inputArray geloopt und die marks werden zu der Gruppe hinzugefügt, in der sich das Subjekt befindet. marks wird zu Group Total hinzugefügt.

var inputArray = [{ subject: 'Physics', marks: '60' }, { subject: 'History', marks: '35' }, { subject: 'Chemistry', marks: '50' }, { subject: 'Language First', marks: '70' }, { subject: 'Geography', marks: '65' }, { subject: 'Maths', marks: '40' }, { subject: 'Language Second', marks: '50' }], 
 
    groups = { 'Group 1': ['Physics', 'Chemistry', 'Maths'], 'Group 2': ['History', 'Geography'], 'Group 3': ['Language First', 'Language Second'], 'Group Total': null }, 
 
    reference = Object.create(null), 
 
    subjects = Object.create(null), 
 
    outputArray = Object.keys(groups).map(function (k) { 
 
     reference[k] = { subject: k, marks: 0 }; 
 
     Array.isArray(groups[k]) && groups[k].forEach(function (a) { subjects[a] = k; }); 
 
     return reference[k]; 
 
    }); 
 

 
inputArray.forEach(function (a) { 
 
    reference[subjects[a.subject]].marks += +a.marks; 
 
    reference['Group Total'].marks += +a.marks 
 
}); 
 

 
console.log(outputArray);

0

Betrachten Sie die folgende Lösung Object.keys verwenden, Array.indexOf Funktionen und vordefinierten groupsMap Objekt:

var groupsMap = { 
    'Group 1': ['Physics','Chemistry','Maths'], 
    'Group 2': ['History','Geography'], 
    'Group 3': ['Language First','Language Second'] 
}, output = {'Group Total': 0}, keys = Object.keys(groupsMap), len = keys.length; 

inputArray.forEach(function(obj){ 
    for (var i = 0; i < len; i++) { 
     if (groupsMap[keys[i]].indexOf(obj['subject']) !== -1) { 
      this[keys[i]] = this[keys[i]] || 0; 
      this[keys[i]] += parseInt(obj['marks']); 
      this['Group Total'] += parseInt(obj['marks']); 
      break; // avoids redundant iterations 
     } 
    } 
}, output); 

var outputArray = Object.keys(output).map((k) => ({'subject': k, 'marks': output[k]})); 

console.log(JSON.stringify(outputArray, 0, 4)); 

Der Ausgang:

[ 
    { 
     "subject": "Group Total", 
     "marks": 370 
    }, 
    { 
     "subject": "Group 1", 
     "marks": 150 
    }, 
    { 
     "subject": "Group 2", 
     "marks": 100 
    }, 
    { 
     "subject": "Group 3", 
     "marks": 120 
    } 
]