我试图将一些值从一个对象推入一个 3 维数组
I am trying to push some values from an object into a 3 dimensional array
我正在尝试将一个对象移植到一个数组中。然而,一旦我到达 constructedQuestionBank[0][1],我就不能再在 Object.keys(conceptArray.Level1) 中插入信息。它返回错误“Uncaught TypeError: constructedQuestionBank[0][1].push is not a function”。
谁能支持我解决这个问题。我选择将信息放入数组的原因是我可以使用随机数生成来随机 select 数组中的某些部分。不过,这棵树需要保持完好无损。例如 (Level1 > Category1 > Item1 >text
).
const conceptArray = {
Level1: {
Category1: {
Item1: `text`,
Item2: `text`,
},
Category2: {
Item1: `text`,
Item2: `text`,
},
Category3: {
Item1: `text`,
Item2: `text`,
},
},
Level2: {
Category1: {
Item1: `text`,
Item2: `text`,
},
Category2: {
Item1: `text`,
Item2: `text`,
},
Category3: {
Item1: `text`,
Item2: `text`,
}
}
}
/*I want it to turn out something like this*/
/*const exampleQuestionBank = [
[`Level1`,
[ `Category1`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
[ `Category2`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
],
[`Level2`,
[ `Category1`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
[ `Category2`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
],
]*/
//What i have so far
const constructedQuestionBank = [];
const createQuestions = () => {
constructedQuestionBank.push(Object.keys(conceptArray)); //inserts Levels
Object.values(conceptArray).forEach(val => {
constructedQuestionBank[0].push(Object.keys(val));
}); //inserts Categories
Object.values(conceptArray.Level1).forEach(val => {
constructedQuestionBank[0][1].push(Object.keys(val));
}); //Inserts Items
console.log(constructedQuestionBank)
}
createQuestions();
重要提示:我应该提到 Level1 Category1、Item1 等是为了便于理解的占位符。真正的键名只是字符。
另一种可能性能更高但性能更差 error-prone 的选项是将您的数据保留为对象,并改为使用随机数生成来键入对象。
因此,要随机 select 一个 text
元素,您可以在您的选项范围内生成 3 个随机数,并像这样访问它:
conceptArray[`Level${rand1}`][`Category${rand2}`][`Item${rand3}`]
Object.entries()
方法将对象转换为 key-value 对数组。您可以递归地使用此方法将所有嵌套级别转换为多维数组。
function objectToArray(obj) {
if (typeof obj !== 'object') {
return obj
}
return Object.entries(obj).map(entry => [entry[0], ojectToArray(entry[1])])
}
console.log(objectToArray(conceptArray))
我正在尝试将一个对象移植到一个数组中。然而,一旦我到达 constructedQuestionBank[0][1],我就不能再在 Object.keys(conceptArray.Level1) 中插入信息。它返回错误“Uncaught TypeError: constructedQuestionBank[0][1].push is not a function”。
谁能支持我解决这个问题。我选择将信息放入数组的原因是我可以使用随机数生成来随机 select 数组中的某些部分。不过,这棵树需要保持完好无损。例如 (Level1 > Category1 > Item1 >text
).
const conceptArray = {
Level1: {
Category1: {
Item1: `text`,
Item2: `text`,
},
Category2: {
Item1: `text`,
Item2: `text`,
},
Category3: {
Item1: `text`,
Item2: `text`,
},
},
Level2: {
Category1: {
Item1: `text`,
Item2: `text`,
},
Category2: {
Item1: `text`,
Item2: `text`,
},
Category3: {
Item1: `text`,
Item2: `text`,
}
}
}
/*I want it to turn out something like this*/
/*const exampleQuestionBank = [
[`Level1`,
[ `Category1`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
[ `Category2`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
],
[`Level2`,
[ `Category1`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
[ `Category2`,
[`Item1`,
[`text`]
],
[`Item2`,
[`text`]
],
],
],
]*/
//What i have so far
const constructedQuestionBank = [];
const createQuestions = () => {
constructedQuestionBank.push(Object.keys(conceptArray)); //inserts Levels
Object.values(conceptArray).forEach(val => {
constructedQuestionBank[0].push(Object.keys(val));
}); //inserts Categories
Object.values(conceptArray.Level1).forEach(val => {
constructedQuestionBank[0][1].push(Object.keys(val));
}); //Inserts Items
console.log(constructedQuestionBank)
}
createQuestions();
重要提示:我应该提到 Level1 Category1、Item1 等是为了便于理解的占位符。真正的键名只是字符。
另一种可能性能更高但性能更差 error-prone 的选项是将您的数据保留为对象,并改为使用随机数生成来键入对象。
因此,要随机 select 一个 text
元素,您可以在您的选项范围内生成 3 个随机数,并像这样访问它:
conceptArray[`Level${rand1}`][`Category${rand2}`][`Item${rand3}`]
Object.entries()
方法将对象转换为 key-value 对数组。您可以递归地使用此方法将所有嵌套级别转换为多维数组。
function objectToArray(obj) {
if (typeof obj !== 'object') {
return obj
}
return Object.entries(obj).map(entry => [entry[0], ojectToArray(entry[1])])
}
console.log(objectToArray(conceptArray))