簡體   English   中英

如何使用 useState 打亂嵌套數組

[英]How to shuffle nested array with useState

我正在制作一個反應原生的測驗應用程序,我想在每次有人選擇測驗時改變問題的順序 我正在考慮使用lodashshuffle但我不完全確定如何為嵌套數組做。

const getTest = async () => {

     try {
        const response = await fetch('https://tgryl.pl/quiz/test/'.concat(route.params.testId));
        const json = await response.json();
        setData(json);
     }
     catch (error) {
          console.error(error);
     } 
}

我在考慮類似setData(_.shuffle(data.tasks))的東西? 我不知道

JSON 看起來像這樣

在此處輸入圖像描述

顯然,要洗牌的數組存儲在響應 object 的tasks屬性中,因此您應該洗牌該數組並將其分配回該屬性:

json.tasks = _.shuffle(json.tasks);
setData(json);

即使這會使 object 發生突變,然后將其傳遞給setData (可能調用setState / useState ,並且這種突變通常是代碼異味),但這在這里不是問題,因為此 object 以前從未用於 Z9ED39E2EA93125866B

不相關,但我不會稱該變量json 它是 JavaScript object。 JSON 是json()方法從請求中檢索並轉換為對象/數組的文本格式的術語。

使用描述內容的名稱,例如quiz

您沒有嵌套的 arrays,您在 object 內部有 arrays。 這就是您收到的響應數據結構。

我認為這是一個有趣的問題,所以在這里我實現了另一種改組問題數組的方法。

邏輯

循環遍歷所有問題及其內部:

  1. 生成一個介於 0 和問題數組長度之間的隨機索引。
  2. 使用pop()刪除數組的最后一個元素並將其返回給Q變量。
  3. 使用splice()將問題Q添加到生成的隨機索引中。

 const arr1 = []; const arr2 = [ {question: 'asd asd 1', answer: 'bla 1', duration: 10}, {question: 'asd asd 2', answer: 'bla 2', duration: 20}, {question: 'asd asd 3', answer: 'bla 3', duration: 15}, {question: 'asd asd 4', answer: 'bla 4', duration: 30} ]; const arr3 = []; const responseObject = { arr1, arr2, arr3 }; let questions = responseObject.arr2; for(const question of questions){ let randIndex = Math.round(Math.random()*(questions.length - 1)); let Q = questions.pop(); questions.splice(randIndex, 0, Q); } console.log(questions)

暫無
暫無

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

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