Как я могу ввести нулевые значения в индексах, где 2 массива не совпадают? - PullRequest
1 голос
/ 25 марта 2019

Я получаю ответы из Typeform API. Я положу эти ответы в набор данных, где вопросы - это имена столбцов. Все это работает, пока на вопрос не дан ответ. Это не возвращает нулевое значение. Например:

Вопросы: [A, B, C, D]

Ответы: [a, c, d] -> Вопрос B не получил ответа.

Я ожидаю вывод [a, null, c, d] для приведенного выше примера.

Я пробовал несколько способов реализовать это в своем коде, но я не нашел правильного ответа.

  let surveys = formsAnswer.items.map(survey => {
    let i = 0
    let lam = survey.answers.map(ans => {
      let answ
      let rightID2 = schema.map(findID => {
        if (findID.id.toLowerCase() === req.body.id){
          let id = findID.columnID[i]
          i++
          return id
        }
      })
      switch (ans.type) {
        case 'boolean':
          answ = ans.boolean ? 'Yes' : 'No'
          break
        case 'choice':
          answ = ans.choice.label
          break
        case 'payment':
          answ = parseFloat(ans.payment.amount) * 100
          break
        case 'empty':
          answ = null
          break
        default:
          answ = ans[ans.type]
          break
      }
      return answ
    })
    return lam
  })
  return res.status(200).json(surveys)
})

В схеме у меня есть доступ к массиву всех идентификаторов вопросов из 1 формы.

Заранее спасибо!

РЕДАКТИРОВАТЬ 1 Пример вывода опроса с 10 вопросами.

   [
       [["ZoW7FL2pVKvR","gfds"],
        ["amx5Q2JU4Qa7","Car 1"],
        ["jlqW0xFRGXdm","No"],
        ["FhfIURjvE8nN","dfs@hotmail.com"], 
        ["vVTYmlvc1YIy",0] 
        ["DqX2Dy0cvmMy","fezfze"]],

       [["ZoW7FL2pVKvR", "Ruben"],
        ["ihNcWeYgZHPb","Male"],
        ["amx5Q2JU4Qa7","Car 2"],
        ["jlqW0xFRGXdm", "Yes"],
        ["FhfIURjvE8nN","ruben@gmail.com"],
        ["vVTYmlvc1YIy", 2],
        ["b8y0pDw3gYpn","No"],
        ["beeg0rtb7Mai","1995-02-10T00:00:00Z"],
        ["Knox8dyeM4Ak",10]]
  ]

Это массив всех идентификаторов вопросов из 1 опроса

"columnID": [
      "ZoW7FL2pVKvR",
      "ihNcWeYgZHPb",
      "amx5Q2JU4Qa7",
      "jlqW0xFRGXdm",
      "FhfIURjvE8nN",
      "vVTYmlvc1YIy",
      "b8y0pDw3gYpn",
      "beeg0rtb7Mai",
      "Knox8dyeM4Ak",
      "DqX2Dy0cvmMy"
    ]

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Вы можете отобразить весь массив anser и построить новые массивы с предварительно заполненными null значениями и назначить каждое заданное значение требуемому индексу.

var answers = [[["ZoW7FL2pVKvR", "gfds"], ["amx5Q2JU4Qa7", "Car 1"], ["jlqW0xFRGXdm", "No"], ["FhfIURjvE8nN", "dfs@hotmail.com"], ["vVTYmlvc1YIy", 0], ["DqX2Dy0cvmMy", "fezfze"]], [["ZoW7FL2pVKvR", "Ruben"], ["ihNcWeYgZHPb", "Male"], ["amx5Q2JU4Qa7", "Car 2"], ["jlqW0xFRGXdm", "Yes"], ["FhfIURjvE8nN", "ruben@gmail.com"], ["vVTYmlvc1YIy", 2], ["b8y0pDw3gYpn", "No"], ["beeg0rtb7Mai", "1995-02-10T00:00:00Z"], ["Knox8dyeM4Ak", 10]]],
    questions = ["ZoW7FL2pVKvR", "ihNcWeYgZHPb", "amx5Q2JU4Qa7", "jlqW0xFRGXdm", "FhfIURjvE8nN", "vVTYmlvc1YIy", "b8y0pDw3gYpn", "beeg0rtb7Mai", "Knox8dyeM4Ak", "DqX2Dy0cvmMy"],
    indices = Object.assign(...questions.map((k, i) => ({ [k]: i }))),
    remapped = answers.map(a => a.reduce((r, b) => {
        r[indices[b[0]]] = b;
        return r;
    }, Array.from({ length: questions.length }).fill(null)));

console.log(remapped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 25 марта 2019

Я не могу сказать вам, почему ответа нет в вашем списке, потому что я не понимаю ваш код, но я мог бы помочь вам получить массив, если хотите.

Предположим, у вас есть массив с идентификаторами всех вопросов, который называется questionIds

const allAnswers = questionIds.map(questionId => getAnswerForQuestionByQuestionId(questionId, answers)

function getAnswerForQuestionByQuestionId(questionId, answers) {
  for(const answer of answers) {
    if (answer[0] === questionId) {
      return answer[1]
    }
  }
  return null
}

Это вернет искомый массив.

...