Javascript函数-无法读取未定义的属性“length”

Javascript函数-无法读取未定义的属性“length”,javascript,function,sorting,Javascript,Function,Sorting,我正在通过编写一些处理排序和搜索无序列表的函数来练习Javascript。我已经写了一些函数,但突然遇到了这个错误,我不完全确定为什么。如果我能找到解决这个错误的方法 这是我的密码 function sortlength(){ formarray(); for(i=0;i<wordarray.length;i++){ if(wordarray[i].length > wordarray[i+1].length){ temp =

我正在通过编写一些处理排序和搜索无序列表的函数来练习Javascript。我已经写了一些函数,但突然遇到了这个错误,我不完全确定为什么。如果我能找到解决这个错误的方法

这是我的密码

function sortlength(){
    formarray();
    for(i=0;i<wordarray.length;i++){
        if(wordarray[i].length > wordarray[i+1].length){
            temp = wordarray[i];
            wordarray[i] = wordarray[i+1];
            wordarray[i+1] = temp;
        }
    }
    toDOM();
}
由于某些原因,错误似乎指向wordarray[i+1]。长度,但不是wordarray[i]。长度

p.S formarray从页面上的单词列表中形成一个数组,它获取每个列表项的内部HTML,toDOM将数组放回页面中

按要求正式安排

var list = document.getElementById("list");
var words = list.getElementsByTagName("li");

var wordarray = [];

function formarray(){//forms array from list on page
    for(i=0;i<words.length;i++){
        wordarray[i] = words[i].innerHTML;
    }
    return wordarray;
}
尝试更改为:

function sortlength(){
    formarray();
    for(i=0;i < wordarray.length - 1;i++){
        if(wordarray[i].length > wordarray[i+1].length){
            temp = wordarray[i];
            wordarray[i] = wordarray[i+1];
            wordarray[i+1] = temp;
        }
    }
    toDOM();
}

我认为你超出了范围。您应该迭代到wordarray.length-2索引,因此当您调用wordarray[i+1]时,您将得到上一次迭代中的最后一个元素。否则您将超出范围。

什么是wordarray?您应该发布formarray的代码,因为这可能就是错误所在。如果应该初始化单词,则无法初始化。如果单词和wordarray的长度相同,那么在循环的最后一次迭代中,您尝试获取wordarray[i+1]。长度将比wordarray的实际长度多1。您是否考虑过wordarray[i+1]有问题的可能性.长度?肯定需要更多信息。您应该使用console.log记录单词和单词数组。调试这样的信息非常有用。另一方面,泡沫的分类速度非常慢。您最好使用Javascript的YES,循环超出范围,因此在尝试查找数组范围i+1的未定义对象的长度时会抛出错误。谢谢
wordarray
(200) ["servant", "watch", "wound", "women", "visitor", "stop", "lip", "excited", "scatter", "soda", "texture", "relax", "white", "thaw", "money", "noxious", "vulgar", "smiling", "imported", "embarrass", "prevent", "uptight", "powder", "base", "charge", "premium", "jump", "welcome", "ultra", "condition", "righteous", "fall", "pop", "decorate", "capricious", "alluring", "kick", "adjoining", "optimal", "amuck", "impulse", "grandiose", "regret", "sky", "absurd", "push", "unbecoming", "loaf", "amount", "wilderness", "eager", "board", "name", "guide", "difficult", "unarmed", "naughty", "puncture", "embarrassed", "symptomatic", "sand", "tick", "jumbled", "pleasant", "shake", "spotless", "womanly", "average", "steady", "motionless", "action", "valuable", "mass", "paddle", "scared", "moor", "squealing", "graceful", "drip", "tacky", "devilish", "quince", "face", "observant", "mice", "plain", "bored", "tough", "delightful", "change", "morning", "business", "adjustment", "reproduce", "spiky", "zonked", "dime", "contain", "rain", "unused", …]
function sortlength(){
    formarray();
    for(i=0;i < wordarray.length - 1;i++){
        if(wordarray[i].length > wordarray[i+1].length){
            temp = wordarray[i];
            wordarray[i] = wordarray[i+1];
            wordarray[i+1] = temp;
        }
    }
    toDOM();
}