..的Javascript..循环中的对象没有在最后一个属性上运行
Javascript for...in loop for objetcs not running on last property
这是我在stackoverflow的第一篇文章。。我正在尝试迭代一个对象(我的实现是一个关联数组),这个对象又具有一些属性。现在,我希望用它构造另一个数组,以便将它用作用于seach操作的jquery自动完成小部件中的localsource。现在的问题是,根据可用的文档,我正在循环使用for。。。但是,输出总是比原始对象少一个。涉及最后一个元素的itearation根本没有执行。下面是我用作输入的示例对象。
SubTeachPair = object{"5CS1":{SubAbbrev:"CA-L",SubCode:"5CS1",SubName:"Computer Architecture",TeacherId:"1",TeacherName:"Ayush Pandey",label:"Computer Architecture",value:"5CS1"},"5CS2":{SubAbbrev:"CA-P",SubCode:"5CS2",SubName:"Computer Engg",TeacherId:"10",TeacherName:"MAyush Pandey",label:"Computer Engg",value:"5CS2"}}
它具有这类元素,并且是动态生成的,因此属性名称是可变的。我写的循环结构是
var SubSource = [];
console.log(SubTeachPair);
var count = 0;
for(sub in SubTeachPair){
console.log(count);
SubSource[count] = {};
SubSource[count]['label']=SubTeachPair[sub]['label'];
SubSource[count]['value']=SubTeachPair[sub]['value'];
count++;
}
然而,给定输入的结果仅为:
object{{ label: "Computer Architecture", value: "5CS1"}}
我是不是遗漏了什么?
edit——生成输入对象的函数如下(单击下一个按钮时会触发)。
$('#' + $(this).attr("id")).autocomplete({
source : 'search',
minLength : 1,
change : function(event, ui) {
if( typeof ui.item != 'undefined') {
SubTeachPair[$(this).attr("id")] = {};
// console.log(ui.item);
SubTeachPair[$(this).attr("id")]['value'] = $(this).attr("id");
SubTeachPair[$(this).attr("id")]['label'] = $('label[for="' + this.id + '"]').html();
SubTeachPair[$(this).attr("id")]['SubCode'] = $(this).attr("id");
SubTeachPair[$(this).attr("id")]['SubName'] =$('label[for="' + this.id + '"]').html();
SubTeachPair[$(this).attr("id")]['SubAbbrev'] =$('label[for="' + this.id + '"]').attr('id');
SubTeachPair[$(this).attr("id")]['TeacherId'] = ui.item.id;
SubTeachPair[$(this).attr("id")]['TeacherName'] = ui.item.value;
// console.log(SubTeachPair);
//window.SubTeachPair = SubTeachPair;
}
}
});
我想我已经找到了错误的原因——作为输入的对象实际上是另一个使用jquery自动完成的表单的输出。现在,当我在输入中输入一些内容,然后单击建议时,建议会填充在文本输入中,但是,如果我没有在输入文本之外单击,而是直接单击触发脚本的按钮,我就会出现错误。否则没关系。有什么办法可以避免这种情况吗?
在您的代码中,数组SubSource
和count
没有定义,您必须声明:
var SubSource = [];
var count = 0`
for(sub in SubTeachPair) {...}
之前
请参阅http://jsfiddle.net/abu5C/
试试这个:
SubSource[count] = {};
for(sub in SubTeachPair) {
console.log(count);
SubSource[count]['label']=SubTeachPair[sub]['label'];
SubSource[count]['value']=SubTeachPair[sub]['value'];
count++;
}
相关文章:
- 表追加而不附加最后一个元素
- 无法在Ionic select中预先选择最后一个选项
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- Jquery append oly获取循环Rails中的最后一个elemen
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 多维关联数组的最后一个索引
- 无法获取vis.js最后一个或第一个选定的网络节点
- 循环以检查数组中的最后一个图像
- AngularJS:如何用同一对象的另一个属性访问一个属性
- 如何为下拉列表的每个选项添加一个属性
- 从输入值中删除最后一个单词
- ..的Javascript..循环中的对象没有在最后一个属性上运行
- 对象绑定模式的rest属性应该是最后一个
- 如何在TR的最后一个TD中添加事件或将ID属性添加到IMG标签
- 替换数据属性中的最后一个破折号值
- 获取对象中的属性数量,然后在for循环中获取最后一个属性
- 什么是'x'表示为“src”属性中的最后一个字母
- 保持数组中最后一个元素具有相同的属性
- 从id属性获取最后一个字符