2015-01-10 20 views
5

I mit Eigenschaften ein Array haben, nehmen Sie die folgende Beispiel:Summe der Objekteigenschaften innerhalb eines Arrays

var arrayPeople = [ 
    { 
     name: 'joe', 
     job: 'programmer', 
     age: 25, 
    }, 
    { 
     name: 'bob', 
     job: 'plumber', 
     age: 30, 
    }; 
]; 

Ich möchte eine Funktion erstellen, die ihre Durchschnittsalter zurück, hier ist das, was ich habe, dass ist derzeit nicht

var ageAverage = function(array) { 
    var age = 0, average; 
    for (var i = 0; i < array.length; i++) { 
     age += array[i].age; 
    } 
    average = age/array.length; 
    return average; 
}; 

arbeiten Was erhalte ich, wenn diese Funktion ausgeführt wird, nicht eine Zahl

Aber was ich kann, um Arbeit zu bekommen ist:

var ageAverage = function(array) { 
    var age = 0, average; 
    for (var i = 0; i < array.length; i++) { 
     age = array[0].age; 
    } 
    average = age/array.length; 
    return average; 
}; 

Der feine Unterschied hier ist, dass ich die + = wegnahm und machte es einfach =, und ich nahm die Nutzung unserer Variable i weg und gab es nur der erste Index des Arrays. Wenn ich das mache, weiß ich, dass die Funktion das Array array korrekt durch arrayPeople ersetzt, aber in meiner for-Schleife läuft etwas schief, das verhindert, dass ich 0 und 1 werde (die Indizes von arrayPeople).

P.S. Ich versuche das alleine zu machen, und ich suche niemanden, der das Problem nur für mich löst, ich würde wirklich nur einige Hinweise darauf zu schätzen wissen, was zu beheben ist oder vielleicht ein Konzept, das ich erforsche muss dieses Problem.

Danke !!

+0

Versuchen Array Transformieren [i] .age in einer Zahl. Initialisieren Sie auch Variablen, es ist eine gute Übung. Verwenden Sie Array nicht als Namen einer Variablen, in manchen Sprachen ist es ein reserviertes Wort. Überprüfen Sie auch Ihr Array von Objekten, gibt es einige Fehler (Kommas und Semikolon) – acontell

Antwort

4

Sie initialisieren müssen age Variable (var age = 0)

var arrayPeople = [{ 
 
    name: 'joe', 
 
    job: 'programmer', 
 
    age: 25, 
 
}, { 
 
    name: 'bob', 
 
    job: 'plumber', 
 
    age: 30, 
 
}]; 
 

 
var ageAverage = function(array) { 
 
    var age = 0, 
 
     average; 
 

 
    for (var i = 0; i < array.length; i++) { 
 
    age += array[i].age; 
 
    } 
 

 
    average = age/array.length; 
 
    return average; 
 
}; 
 

 
console.log(
 
    ageAverage(arrayPeople) 
 
);

in Ihrer Variante age Variable gleich undefined und undefined += number (zum Beispiel 25) gibt NaN;

auch ,-; in dieser Zeile ändern

von

for (var i = 0, i < array.length; i++) { 

zu

for (var i = 0; i < array.length; i++) { 
2

Sie die für sich ändern sollte:

for (var i = 0; i < array.length; i ++) statt für (var i = 0, i < Array.Länge; i ++)

und geben Anfangswert Alter

var age=0 
+0

Vielen Dank für Ihre Antwort, das war ein Tippfehler, in meinem echten Code verwende ich ein Semikolon kein Komma, mein Fehler – Brandon

+0

Hat Ihren Code immer noch nicht funktioniert habe ich prüfte es und gab zurück: 27.5 –

18

Erwägen Sie die Verwendung map und reduce:

arrayPeople. 
    map(function(item){ return item.age; }). 
    reduce(function(a, b){ return a + b; }, 0)/arrayPeople.length; 

Oder nur die reduce als @KooiInc wies darauf hin:

arrayPeople.reduce(function (a,b) { return a + b.age; }, 0)/arrayPeople.length; 

Ein Arbeitsbeispiel:

var arrayPeople = [{ 
 
    name: 'joe', 
 
    job: 'programmer', 
 
    age: 25, 
 
    }, { 
 
    name: 'bob', 
 
    job: 'plumber', 
 
    age: 30, 
 
    }], 
 
    average = arrayPeople.reduce(function(a, b) { 
 
    return a + b.age; 
 
    }, 0)/arrayPeople.length; 
 

 
document.write(average);

+3

Sie benötigen den Zuordnungsteil nicht: 'arrayPeople.reduce (Funktion (a, b) {bringen Sie a + + b.age zurück;}, 0);' – KooiInc

+0

Danke, dieses ist zu mir neu und ich habe es erforscht, eine Sache, die ich nicht finden kann, ist, wie man das nennt. Kann ich das in einer Variablen speichern? Ich benutze letztlich den Wert des Ausgangs in einem innerHTML-, die die durchschnittliche Zahl auf einer HTML-Seite zeigen, so muß ich wie etwas haben. document.getElementById (‚htmlid‘) innerHTML- = „Der Durchschnitt liegt bei“ + (unsere Antwort für dieses Problem hier); – Brandon

+0

Ja, ich habe ein funktionierendes Beispiel hinzugefügt. –

1

Es gibt immer einen Einzeiler.

arrayPeople.reduce((a, o, i, p) => a + o.age/p.length, 0)); 

console.log(`${[{ 
 
    name: 'joe', 
 
    job: 'programmer', 
 
    age: 25, 
 
    }, 
 
    { 
 
    name: 'bob', 
 
    job: 'plumber', 
 
    age: 30, 
 
    } 
 
].reduce((a, o, i, p) => a + o.age/p.length, 0)}%`);

+0

Es funktioniert nicht. Es gibt [Objekt] [Objekt] für 'a', wo Sie eine + o.age machen. Obwohl ich reduziere, um die Summe des Alters für alle Objekte in dem Array zu erhalten, ist die Logik dieselbe. Wenn ich a.age + o.age gemacht habe, hat es funktioniert, aber es gibt immer noch Probleme, wenn ein einzelnes Element im Array ist. – shanti

+0

Hi @shanti, höchstwahrscheinlich übergeben Sie ein Objekt als Initialwert in der Reduce-Methode. Können Sie ein funktionierendes Beispiel für Ihren Code angeben? Wenn a.age funktioniert hat, ist Ihr Akkumulator (a) ein Objekt anstelle einer Nummer. – Ricky

+1

Das erste Argument in der Reduce-Methode ist ein Akkumulator, das zweite ist das aktuelle Element in der Ausgabenliste. Versuchen Sie Folgendes: 'expenseList.reduce ((totalExpense, currentExpense) => {return totalExpense + currentExpense.amount}, 0)'. Es ist nicht notwendig, in 'totalExpense' auf die Eigenschaft' amount' zuzugreifen, da dies das Ergebnis (Akkumulator) ist. Hoffe ich war klar, ich bin am Telefon. Wenn es Zweifel gibt, kannst du es mir sagen, ich werde meinen Schoß nehmen, um ein Beispiel zu geben. – Ricky

Verwandte Themen