我正在制作一個本機反應的測驗應用程式,我想在每次有人選擇測驗時改變問題的順序 。我正在考慮使用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 看起來像這樣

uj5u.com熱心網友回復:
顯然要混洗的陣列存盤在tasks回應物件的屬性中,因此您應該混洗該陣列并將其分配回該屬性:
json.tasks = _.shuffle(json.tasks);
setData(json);
即使這會改變一個物件,然后將它傳遞給setData(它可能呼叫setState/ useState,并且這種改變通常是代碼異味),但這在這里不是問題,因為這個物件以前從未用于狀態。
無關,但我不會稱該變數為json。它是一個 JavaScript 物件。JSON 是該json()方法從請求中檢索并轉換為物件/陣列的文本格式的術語。
使用描述內容的名稱,例如quiz。
uj5u.com熱心網友回復:
您沒有嵌套陣列,而是在物件內部有陣列。這就是您收到的回應資料結構。
我認為這是一個有趣的問題,所以在這里我實作了一種改組問題陣列的替代方法。
邏輯
遍歷所有問題及其內部:
- 在 0 和問題陣列的長度之間生成一個隨機索引。
- 使用
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/403679.html
標籤:
