我有一些像这样的样本数据:
var data = {
"section": {
"1": {
"question": [{
"id": "1a",
"num": "1",
"title": "test"
}, {
"id": "1b",
"num": "2",
"title": "test"
}]
},
"2": {
"question": [{
"id": "2a",
"num": "1",
"title": "test"
}, {
"id": "2b",
"num": "2",
"title": "test"
}]
}
}
}
使用这个我试图计算问题的数量。因此,对于这个总共有4个问题的数据样本......
计划是使用以下数据更新进度表宽度:
<div id="progress"><div id="bar"></div></div>
这是我开始整理的JS代码:
var number = 0, numQuestions, total, width;
function updateProgress() {
number += 1;
numQuestions = data.question;
//total =
width = total / number;
$('#progress #bar').animate({'width':width});
}
要获得width
我猜我需要将两个部分和问题一起添加并将其除以进度条的宽度,然后将进度的宽度设置为该数量数...
任何人都可以提供一些帮助并指出我正确的方向吗?
主要问题是:
#progress #bar
宽度吗?或完全不同的东西?答案 0 :(得分:3)
我建议您按如下方式修改数据结构:
var data = {
"sections": [ // sections is now an array instead of an object
{
"question": [{
"id": "1a",
"num": "1",
"title": "test"
}, {
"id": "1b",
"num": "2",
"title": "test"
}]
},
{
"question": [{
"id": "2a",
"num": "1",
"title": "test"
}, {
"id": "2b",
"num": "2",
"title": "test"
}]
}
]
}
除非您需要命名这些部分,否则无需键入它们。
然后你可以抓住这样的部分数量:
var numSections = data.sections.length;
要获得所有部分的问题总数,您需要创建一个循环:
var numQuestions = 0;
for (var i = 0; i < data.sections.length; i++){
var questions = data.sections[i].question;
for (var j = 0; j < questions.length; j++){
numQuestions++;
}
}
然后,要更新进度条,您将:
function updateProgress() {
number++;
width = number / numQuestions * 100;
$('#progress #bar').animate({'width':width + '%'});
}
您希望#progress
具有设定的宽度,#bar
的宽度基于0
到100%
。
如果您需要命名这些部分,您可以计算出如下问题的数量:
var numQuestions = 0;
for (var sect in data.section){
var questions = data.section[sect].question;
for (var j = 0; j < questions.length; j++){
numQuestions++;
}
}
你可以在这里看到所有这些:http://jsfiddle.net/wAGHS/1/
答案 1 :(得分:1)
如果您查看data
对象,则没有data.question
。问题位于section
下,然后位于1
或2
下(data.section.1.question
和data.section.2.question
)。
首先,将var
设置为data.sections
。 Loop through下方问题对象的部分和check the size,并将它们汇总到一个变量。然后你有问题的总数。
现在到下一部分:你总共有四个问题。进展应该表现出什么?用户回答的问题数量是什么?
答案 2 :(得分:1)
在object
data.question
是undefined
,因为section
对象的每个属性都有question
属性,您可以计算它们。
var number = 0;
for (key in data.section) {
number++
}
答案 3 :(得分:1)
在你的updateProgress()中,因为数据对象在键'question'没有元素
data.question
将返回undefined。
假设: 部分必须是一个对象和 问题必须是一个数组
进一步假设数据可以包含多个“部分”,以获得数据中的问题总数,请尝试:
var total_questions=0;
Object.keys(data).forEach(function(k){
Object.keys(data[k]).forEach(function(num){
total_questions+=data[k][num]['question']
? data[k][num]['question'].length
: 0;
})
});
如果数据只包含一个部分,则上述内容可以简化为:
var total_questions=0;
Object.keys(data.section).forEach(function(num){
total_questions+=data.section[num]['question']
? data.section[num]['question'].length
: 0
});
答案 4 :(得分:1)
此功能会计算数据对象中的“问题”:
function countquestions(obj) {
var count = 0;
for(var prop in obj) {
if (obj.hasOwnProperty(prop)){
for(var propp in obj[prop]) {
if (obj[prop].hasOwnProperty(propp)){
++count;
}
}
}
}
return count;
}
它为上面的数据对象返回2,但你说它有4个问题让我感到困惑,因为它只有两个“问题”对象。如果您将每个“问题”对象计为2,那么只需将函数的返回结果乘以2即可。