[英]How to shuffle nested array with useState
我正在制作一個反應原生的測驗應用程序,我想在每次有人選擇測驗時改變問題的順序。 我正在考慮使用lodash的shuffle但我不完全確定如何為嵌套數組做。
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。 這就是您收到的響應數據結構。
我認為這是一個有趣的問題,所以在這里我實現了另一種改組問題數組的方法。
循環遍歷所有問題及其內部:
pop()
刪除數組的最后一個元素並將其返回給Q
變量。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.