javascript - 将多个值映射到一个属性的最佳方法
问题描述
我有以下对象,它们代表由一组问题及其可能的答案选项组成的调查:
{ "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 并且传递到前端的状态不是很好。我正在尝试修改调查对象,以便我可以先按问题分组,然后将答案选项映射到他们的问题,使它们看起来像这样:
question: { id: int, text: string, answerOptions: [] }
其中 ananswerOption
由 atext
和组成id
:
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
对象,即如上所示的 id 和文本。
我在我的项目中使用 lodash 来帮助解决这个问题。
解决方案
您可以直接映射想要的属性。并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>
推荐阅读
- typescript - nestjs 集成测试“无法设置未定义的属性“userId””
- flutter - 我如何创建模型并将数组数据插入到 sqlite 颤振中
- php - Doctrine MySQL,如何使用 getRepository() 使 andWhere 成为可选
- python - .after() 函数不会让秒表等待
- javascript - × React: TypeError: Object(...) is not a function Stripe
- github - 我可以在个人 GitHub 存储库上禁用“添加文件”下拉菜单吗?
- sql - 循环使用不同参数的 SQL 代码 (Presto)
- python - 没有看到 PIL 模块
- redis - 在 StackExchange.Redis 中有一种有效的方法可以一次查询多个排序集
- azure-sql-database - 对具有相同架构的两个 SQL 表使用相同的模型类