Лучший способ сопоставить несколько значений одному свойству - PullRequest
1 голос
/ 15 октября 2019

У меня есть следующие объекты, которые представляют собой опрос, который состоит из набора вопросов и возможных вариантов ответа:

{ "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 }

Это происходит из ВНУТРЕННЕГО СОЕДИНЕНИЯ на моем столе, а его нет вотличное состояние для перехода на фронтэнд. Я пытаюсь изменить объект опроса, чтобы сначала можно было сгруппировать вопросы, а затем сопоставить варианты ответов с их вопросами, чтобы они выглядели так:

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

, где answerOption состоит из text и 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, который является идентификатором и текстом, как показано выше.

Я использую lodash в своем проекте, чтобы помочь с этим.

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете отобразить нужные свойства напрямую. И возьмите 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>
...