你好,我正在尝试创建一个对象,该对象在同一属性名称下包含一组数组值,这就是我正在尝试的
const quiz = [
{question: 'Who is the main character of DBZ',
options: ['Vegetta','Gohan','Goku']}
]
const newObj = {
options: []
}
quiz.forEach((item)=>{
item.options.forEach((item, index)=>{
newObj.options[`name${index}`] = item
})
})
期望值=
newObj = {
options: [{name: 'Vegetta'},{name:'Gohan'},{name:'Goku'}]
}
实际接收值=
newObj = {
{ options: [ name0: 'Vegetta', name1: 'Gohan', name2: 'Goku' ] }}
提前感谢!
正如您所注意到的,newObj.options[`name${index}`] = item
在options
数组上创建一个新键,并将其设置为item
。相反,您希望将形式为{name: item}
的对象推送到您的数组中。有几种方法可以做到这一点,其中一种方法是像这样使用.push()
:
quiz.forEach((item)=>{
item.options.forEach((item)=>{
newObj.options.push({name: item});
})
});
虽然不常见,但您也可以使用设置options
的当前索引,这与上面的示例略有不同,因为它将保持相同的索引,如果quiz
是一个稀疏数组,您希望在options
:上保持相同的索引,这一点可能很重要
quiz.forEach((item)=>{
item.options.forEach((item, index)=>{
newObj.options[index] = {name: item};
})
});
差异示例:
const arr = [1, 2,,,5]; // sparse array
const pushRes = [];
const indxRes = [];
arr.forEach(n => pushRes.push(n));
arr.forEach((n, i) => indxRes[i] = n);
console.log("Push result", pushRes);
console.log("Index result", indxRes);
对于另一种方法,您还可以选择使用类似.flatMap()
和.map()
的东西来创建options
阵列,您可以使用它来创建newObj
:
const quiz = [
{question: 'Who is the main character of DBZ',
options: ['Vegetta','Gohan','Goku']}
];
const options = quiz.flatMap(({options}) => options.map(name => ({name})));
const newObj = {options};
console.log(newObj);