Javascript 添加连续的字母作为对象键
我要创建具有给定结构的对象:Javascript 添加连续的字母作为对象键,javascript,arrays,function,object,Javascript,Arrays,Function,Object,我要创建具有给定结构的对象: const questions = [ { id: '1', instruction: 'Question1', options: { 'a': 'SomeText1', 'b': 'SomeText2', 'c': 'SomeText3' }, correct: ['c'] }, { id: '2', instruction: 'Question2',
const questions = [
{
id: '1',
instruction: 'Question1',
options: {
'a': 'SomeText1',
'b': 'SomeText2',
'c': 'SomeText3'
},
correct: ['c']
},
{
id: '2',
instruction: 'Question2',
options: {
'a': 'SomeText1',
'b': 'SomeText2',
'c': 'SomeText3',
'd': 'SomeText4'
},
correct: ['a']
},
{
id: '3',
instruction: 'Question3,
options: {
'a': 'SomeText1',
'b': 'SomeText2'
},
correct: ['b']
}
]
我有一个数组,其中包含填充此对象并使用.map()
创建它所需的信息
我只有选项
键有问题。正如你们所看到的,我想要一个字母作为键,这取决于这个问题有多少答案。
当我使用Object.assign()
时,此函数将数字作为键提供给我,我不知道如何用字母表中的字母替换它们
编辑:
因此,选项
键在所需对象中的解决方案是:
options: Object.assign(
{},
...options[index].map((a, i) => ({ [alphabet[i]]: a }))
),
现在,我可以创建一个具有连续字母和指定答案的对象。我建议使用and之类的东西(这两个片段都来自我维护的项目/网站)。网址:
拉链
创建一个元素数组,根据原始数组中的位置分组
使用Math.max.apply()
获取参数中最长的数组。创建一个以该长度作为返回值的数组,并使用带有映射函数的array.from()
创建一个分组元素数组。若参数数组的长度不同,则在找不到值的情况下使用未定义的
objectFromPairs
从给定的键值对创建对象
使用Array.reduce()
创建和组合键值对
我采取的唯一额外步骤是将每个压缩数组修剪到options[index]
的length
const questions=['Question1',
“问题2”,
“问题3”
]
常数答案=[
“回答1”,
“回答2”,
“回答3”
]
常量选项=[
[‘选项1’、‘选项2’、‘选项3’],
[‘选项4’、‘选项5’、‘选项6’],
[‘选项7’、‘选项8’、‘选项9’]
]
常量zip=(…数组)=>{
const maxLength=Math.max(…arrays.map(x=>x.length));
返回数组.from({
长度:maxLength
}).map((u,i)=>{
返回数组.from({
长度:arrays.length
},(u,k)=>数组[k][i];
});
};
const objectFromPairs=arr=>arr.reduce((a[key,val])=>((a[key]=val),a),{});
函数toJson(){
常量字母表=['a','b','c','d','e'];
const json=questions.map((问题,索引)=>({
id:索引+1,
说明:问题,
选项:objectFromPairs(zip(字母表,选项[index]).slice(0,选项[index].length)),
正确:答案[索引]
}))
log(json);
}
toJson()代码>我建议使用and之类的代码(这两个代码片段都来自我维护的项目/网站)。网址:
拉链
创建一个元素数组,根据原始数组中的位置分组
使用Math.max.apply()
获取参数中最长的数组。创建一个以该长度作为返回值的数组,并使用带有映射函数的array.from()
创建一个分组元素数组。若参数数组的长度不同,则在找不到值的情况下使用未定义的
objectFromPairs
从给定的键值对创建对象
使用Array.reduce()
创建和组合键值对
我采取的唯一额外步骤是将每个压缩数组修剪到options[index]
的length
const questions=['Question1',
“问题2”,
“问题3”
]
常数答案=[
“回答1”,
“回答2”,
“回答3”
]
常量选项=[
[‘选项1’、‘选项2’、‘选项3’],
[‘选项4’、‘选项5’、‘选项6’],
[‘选项7’、‘选项8’、‘选项9’]
]
常量zip=(…数组)=>{
const maxLength=Math.max(…arrays.map(x=>x.length));
返回数组.from({
长度:maxLength
}).map((u,i)=>{
返回数组.from({
长度:arrays.length
},(u,k)=>数组[k][i];
});
};
const objectFromPairs=arr=>arr.reduce((a[key,val])=>((a[key]=val),a),{});
函数toJson(){
常量字母表=['a','b','c','d','e'];
const json=questions.map((问题,索引)=>({
id:索引+1,
说明:问题,
选项:objectFromPairs(zip(字母表,选项[index]).slice(0,选项[index].length)),
正确:答案[索引]
}))
log(json);
}
toJson()代码>下面的代码应该可以使用(我相信)
},{})
编辑:更正打字错误以下内容应该有效(我相信)
},{})
编辑:更正的打字错误选项[索引]
返回一个数组。它按索引包含值。通过将其传递给Object.assign
,可以通过数组索引将所有值添加为字符串:“0”
,“1”
,等等
如果我们首先将数组映射到{“a”:option}
列表中,并将结果传播到对象。分配调用,我们可以将这些索引更改为所需的字母:
const问题=
[“问题1”,
“问题2”,
“问题3”
]
常数答案=
[
“回答1”,
“回答2”,
“回答3”
]
常量选项=[
[‘选项1’、‘选项2’、‘选项3’],
[‘选项4’、‘选项5’、‘选项6’],
[‘选项7’、‘选项8’、‘选项9’]
]
函数toJson(){
常量字母表=['a','b','c','d','e'];
const json=questions.map((问题,索引)=>(
{
id:索引+1,
说明:问题,
选项:Object.assign(
{},
…选项[index].map((a,i)=>({[字母表[i]]:a}))
),
正确:答案[索引]
}
));
返回json;
}
log(toJson())代码>选项[索引]
返回一个数组。它按索引包含值。通过将其传递给Object.assign
,可以通过数组索引将所有值添加为字符串:“0”
,“1”
,等等
如果我们首先将数组映射到{“a”:option}
列表中,并将结果传播到对象。分配调用,我们可以将这些索引更改为所需的字母:
const问题=
[“问题1”,
“问题2”
options: Object.assign(
{},
...options[index].map((a, i) => ({ [alphabet[i]]: a }))
),
options: alphabet.reduce((acc, letter, i) => {
let option = options[index][i] || 'DefaultText' + i;
acc[letter] = option;
return acc;
options: Object.assign(
{},
...options[index].map((a, i) => ({ [alphabet[i]]: a }))
),