【问题标题】:Cannot read property length of undefined array error in JavaScript?无法读取 JavaScript 中未定义数组错误的属性长度?
【发布时间】:2018-03-29 16:53:02
【问题描述】:

我正在使用下面的代码来获取 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;
        }
    }

【问题讨论】:

  • if(checkColors){ 始终为真。
  • 你的shuffleArray()看起来怎么样?
  • 显然,调用shuffleArray 会导致undefined,它被分配给checkColors。它可能缺少return xyz,但由于您还没有显示它...
  • @scrappedcola: if (checkColors) 很好,但正如乔纳斯在上面指出的那样,在给定的代码中它总是正确的。 (另外:typeof 是一个运算符,而不是一个函数。与任何其他运算符相比,它的操作数不再需要放在 () 中。)
  • 好吧,在 shuffleArray 函数中确实没有“返回”,shuffle 数组改变了数组并且没有返回任何内容。

标签: javascript jquery arrays sorting undefined


【解决方案1】:

我猜

 shuffleArray(checkColors)

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

 checkColors = shuffleArray(checkColors)

将 shuffleArray 设置为 undefined。

【讨论】:

  • 停止投票。我不应该因此而享有声誉。
【解决方案2】:

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

下面的代码更改应该可以工作 -

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2020-06-02
    • 2021-07-05
    • 2015-02-05
    • 2017-11-25
    • 2021-10-21
    相关资源
    最近更新 更多