使用jQuery计算数组中的对象以更改进度条
Counting objects in array to change progress bar with jQuery
我有一些样本数据,比如:
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
,我想我需要将两个部分和问题加在一起,除以进度条的宽度,然后将进度的宽度设置为该数字的数字??
有人能帮我指明正确的方向吗?
主要问题是:
- numQuestions返回undefined,所以很明显我做错了
- 我不知道怎么算出总数。。。这应该是根据numQuestions计算的
#progress #bar
宽度吗?或者完全是别的什么
我建议修改您的数据结构如下:
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/
计数问题的答案
如果查看data
对象,则不存在data.question
。问题在section
下,然后在1
或2
下(data.section.1.question
和data.section.2.question
)。
因此,从设置var
到data.sections
开始。循环浏览各部分,检查下面问题对象的大小,并将它们相加为一个变量。那么你就有了问题的总数。
现在进入下一部分:你总共有四个问题。进度应该显示什么?用户回答的问题数量或数量?
在object
中,data.question
是undefined
,因为section
对象的每个属性都有一个question
属性,所以可以对它们进行计数。
var number = 0;
for (key in data.section) {
number++
}
http://jsfiddle.net/KuJgN/
此函数确实计算数据对象中的"问题":
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个问题,这让我很困惑,因为它只有两个"问题"对象。如果你把每个"问题"对象都算作两个,那么就把我函数的返回结果乘以二。
在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
});
- 如何计算对象文字中的键
- 使用jQuery计算数组中的对象以更改进度条
- 插件SDK中的动态或计算对象创建
- 计算从一个对象到另一个对象的路径并沿其移动
- 根据摄影机视图更改计算对象旋转
- 如何计算一个对象中五个属性中有多少是非null的
- 如何使用Knockout Mapping插件映射到来自服务器对象的数组,并进行一些计算
- 如何递归地计算它在对象中出现的目标键(属性)的数量
- 为对象计算的聚合物
- 使用 javascript 简化对象计算
- TypeError: undefined 不是对象(计算 'type.toString')
- 从日期对象计算 BST 时间
- 基于父集合中的子对象计算的属性
- 函数从子对象计算父对象大小's大小
- 使用Date对象计算Javascript执行速度是否正确
- 抛出TypeError错误:null不是一个对象(计算"$("body").append&
- TypeError: null不是对象(计算'document.getElementById(x).style&
- 什么Javascript库可以针对对象计算类似mongodb的查询谓词
- & # 39;未定义# 39;在Safari中不是对象(计算'window.webkitURL.createOb
- 如何修复:TypeError: 'null'不是一个对象(计算'event.relatedTar