在字母数组之前加载数字数组
Numerical arrays being loaded before those with letters
我有个小测验。这是一系列问题。程序应该按顺序循环遍历它们。然而,它首先遍历所有带有数字的数组,然后是带有字母的数组,这与我放置它们的顺序相反。以下是问题:
allQuestions = {
'358670': ['358670', '967723', '214571', '569420', '630697', 0],
'mbdpf': ['ajcwh', 'xirgb', 'dzelv', 'mbdpf', 'xguqx', 3],
'637592': ['348335', '921186', '637592', '188551', '391500', 2],
'xhtjv': ['xhtjv', 'jneez', 'cthul', 'bulwl', 'kqfwc', 0],
'206471': ['206471', '419643', '366549', '871328', '926142', 0],
'mwdif': ['bzvai', 'kslgq', 'futgf', 'mwdif', 'sikyp', 3],
'980924': ['327151', '242777', '708582', '860616', '980924', 4],
'usiyi': ['iyfod', 'lapwg', 'dqmtt', 'dyvwk', 'usiyi', 4],
'768898': ['808547', '689143', '875754', '768898', '872606', 3],
'ziojg': ['xqdiv', 'cyqsu', 'akoed', 'obtpn', 'ziojg', 4]
};
这是代码依赖,这是整个JS:
window.onload = function() {
var questionArea = document.getElementsByClassName('questions')[0],
answerArea = document.getElementsByClassName('answers')[0],
checker = document.getElementsByClassName('checker')[0],
current = 0,
allQuestions = {
'358670': ['358670', '967723', '214571', '569420', '630697', 0],
'mbdpf': ['ajcwh', 'xirgb', 'dzelv', 'mbdpf', 'xguqx', 3],
'637592': ['348335', '921186', '637592', '188551', '391500', 2],
'xhtjv': ['xhtjv', 'jneez', 'cthul', 'bulwl', 'kqfwc', 0],
'206471': ['206471', '419643', '366549', '871328', '926142', 0],
'mwdif': ['bzvai', 'kslgq', 'futgf', 'mwdif', 'sikyp', 3],
'980924': ['327151', '242777', '708582', '860616', '980924', 4],
'usiyi': ['iyfod', 'lapwg', 'dqmtt', 'dyvwk', 'usiyi', 4],
'768898': ['808547', '689143', '875754', '768898', '872606', 3],
'ziojg': ['xqdiv', 'cyqsu', 'akoed', 'obtpn', 'ziojg', 4]
};
function loadQuestion(curr) {
var question = Object.keys(allQuestions)[curr];
questionArea.innerHTML = '';
questionArea.innerHTML = question;
}
function loadAnswers(curr) {
var answers = allQuestions[Object.keys(allQuestions)[curr]];
answerArea.innerHTML = '';
for (var i = 0; i < answers.length -1; i += 1) {
var createDiv = document.createElement('div'),
text = document.createTextNode(answers[i]);
createDiv.appendChild(text);
createDiv.addEventListener("click", checkAnswer(i, answers));
answerArea.appendChild(createDiv);
}
}
function checkAnswer(i, arr) {
return function () {
var givenAnswer = i,
correctAnswer = arr[arr.length-1];
if (givenAnswer === correctAnswer) {
addChecker(true);
} else {
addChecker(false);
}
if (current < Object.keys(allQuestions).length -1) {
current += 1;
loadQuestion(current);
loadAnswers(current);
} else {
questionArea.innerHTML = 'Done!';
answerArea.innerHTML = '';
}
};
}
function addChecker(bool) {
var createDiv = document.createElement('div'),
txt = document.createTextNode(current + 1);
createDiv.appendChild(txt);
if (bool) {
createDiv.className += 'correct';
checker.appendChild(createDiv);
} else {
createDiv.className += 'false';
checker.appendChild(createDiv);
}
}
loadQuestion(current);
loadAnswers(current);
};
您是在对象上迭代,而不是在数组上迭代。对象键的顺序不是固定的-如果需要特定的顺序,可以使用数组:
var obj = {
a: 'a',
1: 1,
x: 'x'
}
console.log('object keys', Object.keys(obj))
var arr = ['a', 1, 'x']
console.log('array values', arr)
Javascript对象不保证元素的顺序。您最初放置键的顺序不一定是它们被枚举的顺序。
主要有两种方法。
-
创建一个与对象分开的数组,并按正确的顺序排列键。
var keys = ['358670', 'mbdpf', '637592', 'xhtjv', '206471', 'mwdif', '980924', 'usiyi', '768898'];`
-
使用数组来存储所有的数据,而不是对象。
allQuestions = [ { key: '358670', data: ['358670', '967723', '214571', '569420', '630697', 0] }, { key: 'mbdpf', data: ['ajcwh', 'xirgb', 'dzelv', 'mbdpf', 'xguqx', 3] }, // etc. };
JavaScript中的对象,就像大多数其他语言中的字典一样,不保证顺序!数组做。
你可以把你的数据包装成一个数组:
allQuestions = [
{ 'name': '358670', 'contents': ['358670', '...'] },
{ 'name': 'mbdpf', 'contents': ['...'] }
];
相关文章:
- 如何在PHP数组中加载下一个youtube
- Javascript图像数组预加载速度和从内存中删除
- 数组在手动写入时有效,但从文本文件加载时无效
- 正在从字节数组加载图像内容
- 读取外部local.txt文件以将数据加载到数组中
- Jquery数组-设置和加载值
- 使用RequireJS从数组动态加载模块
- 如何将嵌套的JSON / C#数组加载到视图模型中?使用Knockout,jQuery
- 创建可重复的 HTML 表单并从 JS 数组加载信息
- Javascript:数组加数字
- 如何将 json 编码数组加载为 c3.js 的 x 轴
- 为从数组加载的数据指定id标签
- php数组加载到javascript中
- Javascript未将图像对象从数组加载到画布上
- 使用c#将javascript数组加载到c#数据表中
- 从Javascript数组加载下拉列表并使用angularjs设置选定值的最简单方法
- 如何给<选项>从数组加载的标签
- 用递归数组加载递归组件
- 从数组加载的幻灯片图像
- 捕获csv下载作为数组加载而不是使用Google Script