在JavaScript中无法读取未定义数组错误的属性长度?

时间:2018-03-29 16:53:02

标签: javascript jquery arrays sorting undefined

我使用下面的代码获取3个div使用的颜色列表。如果此div具有颜色集,则应将其推入数组checkColors

var checkColors = [];

$("div[style]").each(function(){
    getColor = $(this).css("color");
    if(getColor){
        checkColors.push(getColor);
    }
});

if(checkColors){
    checkColors = shuffleArray(checkColors);
    if(checkColors.length > 0){
        if(checkColors[0]){
            backgroundColor = checkColors[0];
        }
        if(checkColors[1]){
            primaryColor = checkColors[1];
        }
        if(checkColors[2]){
            secondaryColor = checkColors[2];
        }
    }  
}

但是,if(checkColors.length > 0){给出了Uncaught TypeError: Cannot read property 'length' of undefined错误,我不明白,因为我有一个If语句来检查数组是否未定义。

以下是shuffleArray()功能:

    function shuffleArray(array) {
        for (var i = array.length - 1; i > 0; i--) {
            var j = Math.floor(Math.random() * (i + 1));
            var temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }

2 个答案:

答案 0 :(得分:4)

我想那个

 shuffleArray(checkColors)

改变数组而不是返回一个新数组。因此

 checkColors = shuffleArray(checkColors)

将shuffleArray设置为undefined。

答案 1 :(得分:0)

您已经在shuffleArray中操作数组,不要再将它分配给checkColors。

下面的代码更改应该有效 -

// checkColors = shuffleArray(checkColors);
// replace above line with
shuffleArray(checkColors);

否则,如果要将其分配给checkColors,则需要从shuffleArray返回一个数组。

function shuffleArray(array) {
   // your code
   // after for loop
   return array;
}