Javascript 如果两个数组不';不匹配?

Javascript 如果两个数组不';不匹配?,javascript,node.js,typeform,Javascript,Node.js,Typeform,我正在从TypeFormAPI检索答案。我将把这些答案放入一个数据集中,其中的问题是列名。 所有这些都有效,直到一个问题没有答案。 这不会返回空值。 例如: 问题:[A、B、C、D] 答案:[a,c,d]->问题B没有收到答案 对于上面的示例,我期望输出为[a,null,c,d] 我在代码中尝试了多种方法来实现这一点,但没有找到正确的答案 let surveys = formsAnswer.items.map(survey => { let i = 0 let lam

我正在从TypeFormAPI检索答案。我将把这些答案放入一个数据集中,其中的问题是列名。 所有这些都有效,直到一个问题没有答案。 这不会返回空值。 例如:

问题:[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表单中所有问题ID的数组

提前谢谢

编辑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次调查中所有问题ID的数组

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


我无法告诉您,为什么答案不在您的列表中,因为我不理解您的代码,但我可能可以帮助您获得您想要的数组

假设您有一个包含所有问题ID的数组,称为QuestionID

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
}

这将返回您正在查找的数组。

您可以映射整个anser数组,并使用预先填充的
null
值构建新数组,并将每个给定值分配给所需的索引

var answers=[[“ZoW7FL2pVKvR”,“gfds”],[“amx5Q2JU4Qa7”,“Car 1”],[“jlqW0xFRGXdm”,“否”],[“FHFIRJVE8NN”dfs@hotmail.com“],[“vVTYmlvc1YIy”,0],“DQX2DY0CVMY”,“fezfze”],[“ZoW7FL2pVKvR”,“Ruben”],[“ihNcWeYgZHPb”,“Male”],[“amx5Q2JU4Qa7”,“Car 2”],[“jlqW0xFRGXdm”,“Yes”],[“FHFIRJVE8NN”,”ruben@gmail.com“],[“vVTYmlvc1YIy”,2],[“b8y0pDw3gYpn”,“否”],[“beeg0rtb7Mai”,“1995-02-10T00:00:00Z”],[“Knox8dyeM4Ak”,10],
问题=[“ZoW7FL2pVKvR”、“ihNcWeYgZHPb”、“amx5Q2JU4Qa7”、“jlqW0xFRGXdm”、“FHFIRJVE8NN”、“VVTYMLVC1YY”、“b8y0pDw3gYpn”、“beeg0rtb7Mai”、“Knox8dyeM4Ak”、“DQX2DY0CVMY”],
index=Object.assign(…questions.map((k,i)=>({[k]:i})),
重新映射=答案。映射(a=>a.reduce((r,b)=>{
r[指数[b[0]]]=b;
返回r;
},Array.from({length:questions.length}).fill(null));
console.log(重新映射)

作为控制台包装{max height:100%!important;top:0;}
我不明白这个问题?不使用null,只使用0?您的数组将是[a,0,c,d]。问题不在于0或null。如果我有一系列问题[A,B,C,D],而这个人只回答了问题[A,C,D]。然后,我在问题B的索引中检索答案C。在我的变量lam中,我映射了这些检索到的答案,但我需要找到一种方法来检查已回答问题的id,并将其与问题的索引相匹配。在用户选择答案之前,初始化一个空项数组,该数组与有多少个问题的长度相匹配
[null,null,null,null]
然后在与用户交互后,您可以获取问题答案并将其放在初始数组的位置。如果用户现在至少没有回答一个问题,那么这个问题将被一个null代替。因为你推null,这个地方将是空的,但是如果你推0,它将取代B。所以[a,B,C,D]和[a,0,C,D],C有相同的索引。所以是的,问题是0或null。为了验证特定问题,输出似乎有缺陷。您可以根据答案的长度和输出中的数组长度来验证特定部分,但为了将答案与问题匹配,您需要某种密钥/id链接。这同样有效,谢谢!但比公认的答案要复杂一点。