gpt4 book ai didi

javascript - 使用 jQuery 循环随机 JSON 条目

转载 作者:行者123 更新时间:2023-11-28 19:29:41 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的抽认卡游戏,其中(随机)循环 JSON 文件中的人员姓名列表,然后用户选择正确的人。

我可以选择工作人员,但我似乎无法随机循环 JSON 文件。我看过herehere但都无法让其中任何一个工作。

这是 JSFiddle: http://jsfiddle.net/pacj02xq/1/

HTML:

<div>
<h3>Who is this?</h3>

<div id="namesOutput"></div>
</div>

JavaScript (jQuery):

$(document).ready(function() {
var answers = 3;

//
// Retrieve JSON
//
$.getJSON("https://gist.githubusercontent.com/keenanpayne/ada118875c2a5c672cd3/raw/8a72fc99c71c911f497200a7db3cc07b2d98dc82/sample.json", function(result) {
var staffNumber = 0;
var correctAnswer = "";
var correctAnswerID = Math.floor((Math.random() * 3) + 1);

// Loop through set
$.each(result, function(i, field) {
staffNumber++;

if (staffNumber == correctAnswerID) {
correctAnswer = field.name;
}

// Output possible answers
$("#namesOutput").append('<a class="btn gameBtn" title="' + staffNumber + '">' + field.name + '</a>');

// Break loop depending on level
if (staffNumber === answers) {
return false;
}
});


//
// Check answer
//
$(".gameBtn").click(function(e) {
e.preventDefault();

if ($(this).attr('title') == correctAnswerID) {
$(this).addClass("btn--correct");
$('.btn').not(".btn--correct").addClass("btn--incorrect");
} else {
$(this).addClass("btn--incorrect");

}
});
});
});

最佳答案

我会稍微改变一下它的工作方式。我不会像您想要的那样在循环时获取随机索引,而是使用洗牌方法将项目添加到数组中,然后随机化它们的顺序。

我添加了一个随机播放函数和一个对象大小函数,以便更轻松地处理返回的数据。

1)我们循环遍历 JSON get 的结果,并将随机项存储为正确答案,其余所有项都添加到数组中。

2) 然后我们将错误答案打乱,并将其数量减少到比您需要的选项数少 1 个

3)然后我们将正确答案添加到新缩短的错误答案列表中,并再次打乱它们

4) 最后,我们将此数组扁平化为字符串并将其附加到 DOM。

// courtesy of http://stackoverflow.com/a/6274381/648350
function shuffle(o){ //v1.0
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
// courtesy of http://stackoverflow.com/a/6700/648350
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};


$(document).ready(function() {
var answers = 3;

//
// Retrieve JSON
//
$.getJSON("https://gist.githubusercontent.com/keenanpayne/ada118875c2a5c672cd3/raw/8a72fc99c71c911f497200a7db3cc07b2d98dc82/sample.json", function(result) {
var numberOfResults = Object.size(result);
var staffNumber = 0;
var correctAnswer = "";
var correctAnswerID = Math.floor((Math.random() * numberOfResults) + 1);
var outputHtml = [];
// Loop through set
$.each(result, function(i, field) {
staffNumber++;

if (staffNumber == correctAnswerID) {
correctAnswer = '<a class="btn gameBtn" title="' + staffNumber + '">' + field.name + '</a>'; // store our correct answer
}else{
outputHtml.push('<a class="btn gameBtn" title="' + staffNumber + '">' + field.name + '</a>'); // add all the other answers
}
});
outputHtml = shuffle(outputHtml).slice(0, answers - 1); // -1 because one answer will come from the 'correct' answer
outputHtml.push(correctAnswer); // add correct answer after slicing
outputHtml = shuffle(outputHtml); // shuffle the correct answer around again
outputHtml = outputHtml.join(''); // flatten outputHtml into single string
$("#namesOutput").append(outputHtml); // add it to the DOM


//
// Check answer
//
$(".gameBtn").click(function(e) {
e.preventDefault();

if ($(this).attr('title') == correctAnswerID) {
$(this).addClass("btn--correct");
$('.btn').not(".btn--correct").addClass("btn--incorrect");
} else {
$(this).addClass("btn--incorrect");

}
});
});
});

<强> DEMO

关于javascript - 使用 jQuery 循环随机 JSON 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com