如何从数组值中创建具有相同名称的OBJ属性



你好,我正在尝试创建一个对象,该对象在同一属性名称下包含一组数组值,这就是我正在尝试的

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}`] = itemoptions数组上创建一个新键,并将其设置为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);

相关内容

  • 没有找到相关文章

最新更新