Как объединить значения строкового массива с определенным свойством в массиве объектов в Type Script / Java Script - PullRequest
0 голосов
/ 03 марта 2019

У меня есть объект вопроса

let question = {
    id: 1,
    description: 'how is the service',
    answers: [
      {
         id: 1,
         description: 'poor'
      },
      {
         id: 2,
         description: 'good'
      }
    ]
};

let newquestion = {
    description: 'new question',
    answers: [
        'new poor',
        'new good'
    ]
}

Мне нужно сопоставить значения ответов с соответствующим свойством description в массиве ответов внутри объекта вопроса.

Мне нужны выходные данные для просмотракак,

  q = {
    id: 1,
    description: 'new question',
    answers: [
      {
         id: 1,
         description: 'new poor'
      },
      {
         id: 2,
         description: 'new good'
      }
    ]
};

я пытался,

const q = {...question, ...newquestion};

Но я получаю вывод, как,

q = {
    id: 1,
    description: 'new question',
    answers: [
      'new poor',
      'new good'
    ]
};

Я новичок в машинописи и JavaScript.Пожалуйста, помогите, где я иду не так.

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Используйте простые map для изменения значений:

const q = {...question, ...newQuestion};
q.answers = q.answers.map((e, i) => { return { id: i + 1, description: e } });
0 голосов
/ 03 марта 2019

Если у вас все в порядке с мутацией оригинального question, просто выполните цикл newquestion.asnwers и обновите question.answers, используя соответствующие index

let question = {id:1,description:'how is the service',answers:[{id:1,description:'poor'},{id:2,description:'good'}]},
    newquestion={description:'new question',answers:['new poor','new good']};

newquestion.answers.forEach((description, i) => {
  question.answers[i].description = description
})

console.log(question)

Если вы хотите создать новый объект q, используйте map, чтобы получить массив новых ответов и создать новый объект с использованием синтаксиса распространения:

let question = {id:1,description:'how is the service',answers:[{id:1,description:'poor'},{id:2,description:'good'}]},
    newquestion={description:'new question',answers:['new poor','new good']};

const newAnswers = newquestion.answers.map((description, i) => (
    { ...question.answers[i], description }
))

const q = { ...question, answers: newAnswers }
console.log(q)
0 голосов
/ 03 марта 2019

Сначала необходимо изменить массив answers на newquestion в нужном формате.

let question = {id: 1,description: 'how is the service',answers: [{id: 1,description: 'poor'},{id: 2,description: 'good'}]};
let newquestion = {description: 'new question',answers: ['new poor','new good']}

newquestion.answers = newquestion.answers.map((val, index) => ({ id:index+1, description: val }))

let op = {...question, ...newquestion}

console.log(op)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...