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 }))
      ),