2017-09-19 3 views
0

Je suis nouveau sur Javascript et ceci est ma première publication sur StackOverflow. J'ai été coincé sur un problème pendant environ une semaine et je me demandais si quelqu'un ici pourrait être en mesure d'aider. Nous étions censés créer une méthode d'assortiment d'un tableau & 2 fonctions. Je suis coincé sur ces acquis:Comment réparer la méthode et la fonction pour les objets dans le tableau

  • hasMoreOscarsThan
    Cette méthode accepte un objet acteur en tant que paramètre et renvoie true si l'acteur a plus Oscars que celui qui est passé en paramètre et false sinon.

  • getAverageAge Cette fonction renvoie l'âge moyen de tous les acteurs du tableau.

DÉCLARANT FONCTION PRINCIPALE & MATRICE

function famousPerson(name, age, oscars) { 
    this.name = name; 
    this.age = age; 
    this.oscars = oscars; 
    this.hello = function() { 
     console.log("Hello, my name is " + this.name + "."); 
    }; 
    this.hasMoreOscarsThan = function (x) { 
     if (== famousPerson.oscars && this.oscars > famousPerson.oscars) { 
      return this.name; 
     } else { 
      return "False!"; 
     } 
    }; 
}; 

OBJETS EN DÉCLARANT MATRICE

var actors = []; 
actors[0] = new famousPerson("Leonardo DiCaprio", 41, 1); 
actors[1] = new famousPerson("Jennifer Lawrence", 25, 1); 
actors[2] = new famousPerson("Samuel L. Jackson", 67, 0); 
actors[3] = new famousPerson("Meryl Streep", 66, 3); 
actors[4] = new famousPerson("John Cho", 43, 0); 

Ce sont les méthodes & fonctions I écrivaient:

// hasMoreOscarsThan method 
actors.forEach(function (name.famousPerson); { 
    // I put compare argument 2 and print result to console 
    console.log(name.famousPerson.hasMoreOscarsThan(famousPerson.name)); 
}); 

// FUNCTIONS TO CALL 
// getAverageAge function 
var getAverageAge = (
    actors[0].age + actors[1].age + actors[2].age + actors[3].age + actors[4].age 
)/actors.length; 

Pour hasMoreOscars que, l'entrée doit être le nom d'un autre famousPerson. J'ai été en mesure de tester le nombre d'oscars contre un nombre entier comme 2, mais ce n'est pas ce que la question demande ...

getAverageAge devrait être une fonction. J'ai déjà connecté la somme à la console directement, mais il devrait y avoir un moyen plus efficace.

Merci beaucoup, tout le monde!

+0

Il est pas vraiment clarifiez ce que vous demandez ... – Axel

Répondre

0

hasMoreOscarsThan

vous passez x dans la fonction, mais pas vraiment l'utiliser. Voir ci-dessous j'ai changé x pour otherPerson ... et comme la question devrait renvoyer vrai, pas le nom des acteurs.

function famousPerson(name, age, oscars) { 
    this.name = name; 
    this.age = age; 
    this.oscars = oscars; 
    this.hello = function() { 
     console.log("Hello, my name is " + this.name + "."); 
    }; 
    this.hasMoreOscarsThan = function(otherPerson) { 
     if (this.oscars > otherPerson.oscars) { 
      return true; 
     } else { 
      return false; 
     } 
    }; 
}; 

âge moyen

Heres une fonction pour obtenir l'âge moyen de l'ensemble des acteurs. vous pouvez voir comment cela fonctionne, tout d'abord, il utilise la carte pour créer un tableau des âges des acteurs, puis j'utilise une fonction appelée sumarr que j'ai également définie ci-dessous qui vous donne la somme d'un tableau de nombres, alors évidemment sa longueur pour obtenir la moyenne.

function av_age(actors){ 
    var ages = actors.map(function(el){return el.age}) 
    var average = sumarr(ages)/actors.length 
    return average 
} 

function sumarr(arr){ 
    return arr.reduce(function(tot, el){return tot+el}); 
} 

ou (en une seule fonction)

function getAverageAge(actors){ 
    var sumOfAges= actors.reduce(function(tot, el){return tot+el.age},0) 
    var average=sumOfAges/actors.length 
    return average 
} 
+0

Salut - désolé que cela m'est si long de vous répondre! Je vous remercie! Donc, si j'écrivais une fonction pour résumer les âges, ce serait quelque chose de plus proche de: function getAverageAge (actors) { return actors.reduce (somme, 0);} –

+0

* mise à jour * - si vous voulez ajouter jusqu'à ce que tous les acteurs vieillissent sans fonctions auxiliaires comme mon 'sumarr' alors vous écririez - 'acteurs.reduce (fonction (tot, el) {retour tot + el.age}, 0)'. Dans cet el est l'acteur et 0 est le nombre de départ. voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=a – treeseal7

+0

\ tot, el \ - en écrivant, vous étiez en abrégé 'total' et autre? somme et valeur? Aussi, quelle est la raison de noter \, 0 \? - J'ai vu ça dans https://developer.mozilla.org mais je n'ai pas la raison, exactement. Pardon! –

0
// It is good pracitece to use capital letter on constructor functions to remind users of your code 
// to use the NEW operator when creating instances of the object. 
function FamousPerson(name, age, oscars) { 
this.name = name; 
this.age = age; 
this.oscars = oscars; 
this.hello = function() { 
console.log("Hello, my name is " + this.name + "."); 
}; 
this.hasMoreOscarsThan = function(otherFamousPerson) { 
    // you pass a FamousPerson object as a parameter (named otherFamousPerson) and then 
    // compare the oscar property of the otherFamousPerson parameter against the oscar property of this object. 
    if (this.oscars > otherFamousPerson.oscars) { 
     return this.name; 
    } else { 
     return "False!"; 
    } 
}; 

}; 

// DECLARING OBJECTS IN ARRAY 

var actors = []; 
actors[0] = new FamousPerson("Leonardo DiCaprio", 41, 1); 
actors[1] = new FamousPerson("Jennifer Lawrence", 25, 1); 
actors[2] = new FamousPerson("Samuel L. Jackson", 67, 0); 
actors[3] = new FamousPerson("Meryl Streep", 66, 3); 
actors[4] = new FamousPerson("John Cho", 43, 0); 

// Compare the oscars of 2 FamousPerson objects: 
console.log(actors[3].hasMoreOscarsThan(actors[1])); 

// Compute the average age of all FamousPerson objects in the actors array: 
averageAge = actors.reduce(function(sum,actor){ 
    return sum+actor.age; 
},0)/actors.length; 

console.log(averageAge); 

vous pouvez trouver plus d'informations sur la méthode Array.prototype.reduce ici sur MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=a