繁体   English   中英

map 多个值到一个属性的最佳方法

[英]Best way to map multiple values to one property

我有以下对象,它们代表由一组问题及其可能的答案选项组成的调查:

{ "surveyTitle": "Survey 1", "questionText": "Question 1?", "questionId": 1, "offeredAnswerText": "Answer 1", "offeredAnswerId": 1 },
{ "surveyTitle": "Survey 1", "questionText": "Question 1?", "questionId": 1, "offeredAnswerText": "Answer 2", "offeredAnswerId": 2 },
{ "surveyTitle": "Survey 1", "questionText": "Question 2?", "questionId": 2, "offeredAnswerText": "Answer 3", "offeredAnswerId": 3 }

这是来自我桌子上的 INNER JOIN 并且它不是一个很好的 state 传递到前端。 我正在尝试修改调查 object 所以我可以先按问题分组,然后 map 他们问题的答案选项,所以它们看起来像这样:

question: { id: int, text: string, answerOptions: [] }

其中answerOptiontextid组成:

answerOption: { offeredAnswerId, offeredAnswerText }

我有以下表达式:

const questions = _.chain(rows).groupBy("id").map((question, i) => ({
        id: i,
        text: question[0].questionText,
        answerOptions: _.map(question, 'offeredAnswerText')
    })).value();

到目前为止效果很好,但我希望answerOptions数组还包括完整的answerOption object,即如上所示的 id 和文本。

我在我的项目中使用 lodash 来帮助解决这个问题。

您可以直接 map 想要的属性。 并取questionId而不是id进行分组。

 var rows = [{ "surveyTitle": "Survey 1", "questionText": "Question 1?", "questionId": 1, "offeredAnswerText": "Answer 1", "offeredAnswerId": 1 }, { "surveyTitle": "Survey 1", "questionText": "Question 1?", "questionId": 1, "offeredAnswerText": "Answer 2", "offeredAnswerId": 2 }, { "surveyTitle": "Survey 1", "questionText": "Question 2?", "questionId": 2, "offeredAnswerText": "Answer 3", "offeredAnswerId": 3 }], questions = _.chain(rows).groupBy("questionId").map((question, id) => ({ id, text: question[0].questionText, answerOptions: _.map(question, ({ offeredAnswerId, offeredAnswerText }) => ({ offeredAnswerId, offeredAnswerText })) })).value(); console.log(questions);
 .as-console-wrapper { max-height: 100%;important: top; 0; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM