..的Javascript..循环中的对象没有在最后一个属性上运行

Javascript for...in loop for objetcs not running on last property

本文关键字:最后一个 属性 运行 Javascript 循环 对象      更新时间:2023-09-26

这是我在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自动完成的表单的输出。现在,当我在输入中输入一些内容,然后单击建议时,建议会填充在文本输入中,但是,如果我没有在输入文本之外单击,而是直接单击触发脚本的按钮,我就会出现错误。否则没关系。有什么办法可以避免这种情况吗?

在您的代码中,数组SubSourcecount没有定义,您必须声明:

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++; 
}