如何在 2 个数组不匹配的索引上输入空值?
How can I enter null values on indexes where 2 arrays don't match?
我正在从 Typeform API 中检索答案。我会将这些答案放入一个数据集中,其中问题是列名。
所有这些都有效,直到没有回答问题。
这不是 return 空值。
例如:
问题:[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"
]
我不能告诉你,为什么答案不在你的列表中,因为我不明白你的代码,但我也许可以帮你得到你想要的数组。
假设您有一个名为 questionIds 的数组,其中包含所有问题的 ID
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
}
这将 return 您要查找的数组。
您可以映射整个 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; }
我正在从 Typeform API 中检索答案。我会将这些答案放入一个数据集中,其中问题是列名。 所有这些都有效,直到没有回答问题。 这不是 return 空值。 例如:
问题:[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"
]
我不能告诉你,为什么答案不在你的列表中,因为我不明白你的代码,但我也许可以帮你得到你想要的数组。
假设您有一个名为 questionIds 的数组,其中包含所有问题的 ID
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
}
这将 return 您要查找的数组。
您可以映射整个 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; }