嘿伙计们,我正在尝试比较两个阵列......正确的顺序(长度可能会有所不同)和用户顺序(长度也可能不同)。我尝试了什么:
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时,从未定义的位置???
我发现的解决方案是从函数中评论的最后一行,但是这样的情况是如此蹩脚......
答案 0 :(得分:2)
问题是你只声明变量temp
但从不用值初始化它,所以在设置值之前它是undefined
。
接下来发生的事情是您将temp
与字符串<span class='green'>
或<span class='red'>
连接在一起。如果至少有一个操作数是字符串,并且必要时将其他操作数转换为字符串,则一元+
运算符执行字符串连接。但由于temp
还不是字符串(其类型为undefined
),因此类型转换从undefined
发送到String
。这种转换的规则是它产生字符串'undefined'
。这就是你得到这个结果的原因。
您应该使用空字符串初始化temp
:
var temp = '';
答案 1 :(得分:1)
你的临时未初始化,也许是造成这个问题。检查一下!
答案 2 :(得分:1)
将temp设置为初始值。 var temp='';