簡體   English   中英

我正在嘗試將對象中的一些值推送到 3 維數組中

[英]I am trying to push some values from an object into a 3 dimensional array

我正在嘗試將對象移植到數組中。 但是,一旦我到達ConstructedQuestionBank [0] [1],我就不能再在Object.keys(conceptArray.Level1)中插入信息。 它返回錯誤“未捕獲的 TypeError:ConstructedQuestionBank[0][1].push 不是函數”。

任何人都可以支持我如何解決這個問題。 我選擇將信息放入數組的原因是我可以使用隨機數生成來隨機選擇數組中的某些部分。 不過,這棵樹需要保持完整。 例如(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 等是便於理解的占位符。 真正的鍵名只是字符。

Object.entries()方法將對象轉換為鍵值對數組。 您可以遞歸地使用此方法將所有嵌套級別轉換為多維數組。

function objectToArray(obj) {
    if (typeof obj !== 'object') {
      return obj
    }
    return Object.entries(obj).map(entry => [entry[0], ojectToArray(entry[1])])
}
console.log(objectToArray(conceptArray))

另一種可能性能更高且不易出錯的選項是將數據保留為對象,並使用隨機數生成來鍵入對象。

因此,要隨機選擇一個text元素,您可以在選項范圍內生成 3 個隨機數,並像這樣訪問它:

conceptArray[`Level${rand1}`][`Category${rand2}`][`Item${rand3}`]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM