Есть ли способ применить условный объект? - PullRequest
0 голосов
/ 20 января 2019

Мне нужно предоставить решение для отображения наивысшего балла учащегося в классе.

function highestScore (students) {

// код здесь }

    // TEST CASE
     console.log(highestScore([
      {
     name: 'Daisy',
     score: 90,
     class: 'foxes'
   },
   {
      name: 'Alexander',
      score: 85,
      class: 'wolves'
   },
   {
    name: 'Sergio',
    score: 74,
    class: 'foxes'
   },
   {
     name: 'Anabelle',
     score: 78,
     class: 'wolves'
   }
 ]));

 From the parameter, the function would return the name of each class and 
 display the highest student's name and score of that student.

  function highestScore (students) {
    var classes = {};
    var scores = [];
   for(i=0; i<students.length; i++){
     var inputClass = students[i].class;
     var inputScore = students[i].score;
     var inputName = students[i].name;
     var classScore = [];
     var isExist = false;

     var object = Object.values(class);
     return classScore;
   }


 // TEST CASE
 console.log(highestScore([
   {
     name: 'Daisy',
     score: 90,
    class: 'foxes'
   },
   {
     name: 'Alexander',
     score: 85,
     class: 'wolves'
   },
   {
     name: 'Sergio',
     score: 74,
     class: 'foxes'
   },
   {
     name: 'Anabelle',
     score: 78,
     class: 'wolves'
   }
 ]));

 The result would show something like this.
 // {
 //   foxes: { name: 'Daisy', score: 90 },
 //   wolves: { name: 'Alexander', score: 85 }
 // }

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Мое текущее решение выглядит следующим образом.

    function highestScore (students) {
         var object = {};
     var result = [];
     for (var i=0; i<students.length; i++){
    var nameInput = students[i].name
     var scoreInput = students[i].score
     var classInput = students[i].class

if(object[classInput] === undefined){
  object[classInput] = {
    name: nameInput,
    score: scoreInput,
  }
}
for(var j=0; j<students.length; j++){
  if(students[j].class === object[students[i].class] && students[j].score > object[students[i].class].score){
    object[classInput] = {
    name: students[j].name,
    score: students[j].score,
    }      
  }
}

}

    return object;

   }

Однако я не смог вставить новое значение, если участвующие ученики имеют более высокий балл, чемначальные.

// TEST CASE console.log(highestScore([ { name: 'Dimitri', score: 90, class: 'foxes' }, { name: 'Alexei', score: 85, class: 'wolves' }, { name: 'Sergei', score: 94, class: 'foxes' }, { name: 'Anastasia', score: 78, class: 'wolves' } ]));

0 голосов
/ 20 января 2019

Вы можете reduce в объект, ключи которого являются именами классов, значения которых являются на данный момент самыми высокими учениками для этого класса. На каждой итерации, если в классе еще нет значения, присваивайте ученику, в противном случае назначайте ученика, только если ученик уже в этом классе имеет более низкий балл:

function highestScore(arr) {
  const highestByClass = arr.reduce((a, student) => {
    const { class: className, score } = student;
    if (!a[className] || a[className].score < score) {
      a[className] = student;
    }
    return a;
  }, {});
  return Object.values(highestByClass);
}


console.log(highestScore([
   {
     name: 'Daisy',
     score: 90,
    class: 'foxes'
   },
   {
     name: 'Alexander',
     score: 85,
     class: 'wolves'
   },
   {
     name: 'Sergio',
     score: 74,
     class: 'foxes'
   },
   {
     name: 'Anabelle',
     score: 78,
     class: 'wolves'
   }
]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...