比较数组函数返回undefined

时间:2014-11-25 10:18:17

标签: javascript jquery arrays

嘿伙计们,我正在尝试比较两个阵列......正确的顺序(长度可能会有所不同)和用户顺序(长度也可能不同)。我尝试了什么:

function checkArrays(arrayA, arrayB){
    var temp;
    for(var i = 0; i < arrayA.length; i++)
    {
        if(arrayA[i] == arrayB[i]){
            temp = temp + "<span class='green'>" + arrayB[i] + "</span> ";
        }
        else
        {
            temp = temp + "<span class='red'>" + arrayB[i] + "</span> ";
        } 
    }

    inputParagraph = document.getElementById("userInput");
    inputParagraph.innerHTML = temp;
    //inputParagraph.innerHTML = inputParagraph.innerHTML.replace(/undefined/g, '');
}

console.log(correctOrderArray); console.log(userArray); console.log(checkArrays(correctOrderArray, userArray);返回:

[1, 8, 20, 39, 72]
[1, 39, 20, 8, 72]
undefined<span class='green'>1</span> <span class='red'>39</span> <span class='green'>20</span> <span class='red'>8</span> <span class='green'>72</span> 

我的问题是:当我为此函数返回conosle.log时,从未定义的位置???

我发现的解决方案是从函数中评论的最后一行,但是这样的情况是如此蹩脚......

3 个答案:

答案 0 :(得分:2)

问题是你只声明变量temp但从不用值初始化它,所以在设置值之前它是undefined

接下来发生的事情是您将temp与字符串<span class='green'><span class='red'>连接在一起。如果至少有一个操作数是字符串,并且必要时将其他操作数转换为字符串,则一元+运算符执行字符串连接。但由于temp还不是字符串(其类型为undefined),因此类型转换从undefined发送到String。这种转换的规则是它产生字符串'undefined'。这就是你得到这个结果的原因。

您应该使用空字符串初始化temp

var temp = '';

修复示例:http://jsfiddle.net/ce6tyan2/

答案 1 :(得分:1)

你的临时未初始化,也许是造成这个问题。检查一下!

答案 2 :(得分:1)

将temp设置为初始值。 var temp='';