2016-03-24 3 views
1

Я не вдохновляюсь и, вероятно, очень просто, что мне нужно делать, кроме idk.Как я могу создать конкретный объект из массива объектов javascript?

Допустим, у нас есть этот массив:

var answers = [ 
    { 
    name: 'Name 1', 
    score: 5, 
    correct_ans: 'y' 
    challenge: .... 
    }, 
    { 
    name: 'Name 2', 
    score: 10, 
    correct_ans: 'n', 
    challenge: .... 
    }, 
    { 
    name: 'Name 1', 
    score: 12, 
    correct_ans: 'y', 
    challenge: .... 
    }, 
    { 
    name: 'Name 2', 
    score: 8, 
    correct_ans: 'y', 
    challenge: .... 
    } 
] 

Так что мне нужно от вопросов массива является другой массив как это:

var array = [ 
{ 
    name: 'Name1', 
    overall_score: --total score-- if the correct_ans is y 
    score: [ 
    { 
     score: 5, 
     challenge: .... 
    } 
    ] 
} 
] 

И так далее .. В основном я хочу создать таблицу лидеров из таблицы ответов. Мне удалось извлечь объекты, не повторяя их. Я не уверен, если это поможет мне: https://plnkr.co/edit/rXRrPc1MrSs181GBv8tf?p=preview

+0

Возможный дубликат [Что является наиболее эффективным методом GroupBy на яваскрипте массива объектов?] (Http://stackoverflow.com/questions/14446511/what-is-the -most-efficient-method-to-groupby-on-a-javascript-array-of-objects) –

+1

Да, но из того, что я вижу, есть много вещей, которые я не понимаю. Но спасибо за ссылку, которая может помочь в будущем. – Shaker

ответ

2

Вы можете выполнять итерацию и строить новый массив сгруппированными данными.

var questions = [{ team_name: 'Team A', points: 0, correct_ans: 'n' }, { team_name: 'Team B', points: 10, correct_ans: 'y' }, { team_name: 'Team A', points: 15, correct_ans: 'y' }, { team_name: 'Team B', points: 15, correct_ans: 'y' }, { team_name: 'Team A', points: 20, correct_ans: 'y' }, { team_name: 'Team B', points: 20, correct_ans: 'y' }], 
 
    array = function (array) { 
 
     var r = []; 
 
     array.forEach(function (a) { 
 
      if (a.correct_ans !== 'y') { 
 
       return; 
 
      } 
 
      if (!this[a.team_name]) { 
 
       this[a.team_name] = { team_name: a.team_name, overall_score: 0, score: [] }; 
 
       r.push(this[a.team_name]); 
 
      } 
 
      this[a.team_name].overall_score += a.points; 
 
      this[a.team_name].score.push({ points: a.points, correct_ans: a.correct_ans }); 
 
     }, {}); 
 
     return r; 
 
    }(questions); 
 

 
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

+0

Это именно то, что мне нужно. Большое спасибо ! – Shaker

Смежные вопросы