2017-01-24 14 views
0

いくつかのデータをグループ化してマップする(私はそれを行う最良の方法は間違っているかもしれないと考えている)配列に次のJSFiddleを作成しました。グループ化し、lodashを使用して配列にデータをマッピングする

JSFiddle

JSFiddleは、所望の結果に加えて、私のコメントアウト方法のいくつかを示しています。

私のコードは、以下である:

var answers = [ 
    { 'question_id': 1, 'id': 1, 'answer': 'Cat' }, 
    { 'question_id': 1, 'id': 2, 'answer': 'Dog' }, 
    { 'question_id': 2, 'id': 3, 'answer': 'Fish' }, 
    { 'question_id': 2, 'id': 4, 'answer': 'Ant' } 
]; 

var result=_.chain(answers).groupBy("question_id").map(function(v, i) { 
    return { 
    question_id: i, 
// id: _.get(_.find(v, 'id'), 'id'), 
    answers:[ 
     {id: 1, answer: 'Cat'}, 
      {id: 2, answer: 'Dog'}, 
// {id: _.map(v, 'id'), answer: _.map(v, 'answer'),} 
    ] 
    } 
}).value(); 
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, ' ') + '</pre>'; 

答えて

1

。 'question_id'を除いて回答を得るには、それらの間にマップする必要があり、omitプロパティを指定する必要があります。これは、マップの機能を使用して行うことができます使用して、その後

answers: _.map(v, function(answer){ 
    return _.omit(answer, 'question_id'); 
} 

またはパラメータの一部が既に適用されている省略関数を使用して、そのマップの関数として:

var omitQuestion = _.partialRight(_.omit, 'question_id'); 

answers: _.map(v, omitQuestion) 
1

我々は、アレイ内の各オブジェクトを反復し、キーとしてquestion_id持つオブジェクトにプッシュ。存在しない場合は作成します。次に、結果のオブジェクトを配列に変換します。あなたはほぼありました

var answers = [ 
 
    { 'question_id': 1, 'id': 1, 'answer': 'Cat' }, 
 
    { 'question_id': 1, 'id': 2, 'answer': 'Dog' }, 
 
    { 'question_id': 2, 'id': 3, 'answer': 'Fish' }, 
 
    { 'question_id': 2, 'id': 4, 'answer': 'Ant' } 
 
]; 
 
var result = {}; 
 
for (var i = 0; i < answers.length; i++) { 
 
    var question_id = answers[i].question_id; 
 
    if(!result[question_id]) { 
 
    result[question_id] = {question_id: question_id, answers: []}; 
 
    } 
 
    result[question_id].answers.push({id: answers[i].id, answer: answers[i].answer}) 
 
} 
 
result = Object.keys(result).map(function (key) { return result[key]; }); 
 
console.log(result);

関連する問題