我有一个数组:
var playpicks2 = new Array("000", "001", "002");
和数组中的数组:
var allwinning = new Array(
["000", "001", "002"],
["000", "010", "020"],
["000", "011", "022"],...);
var playpicks = allwins[0];
这就是我想要做的事情:
if(playpicks==playpicks2)
{
print("yes they are matched");
}
else
{
print("No No No!");
}
// and I always get "No No No!"
当我print(playpicks2)
时,我
000,001,002
但当我print(playpicks)
时,我
System.String[]
我该如何解决这个问题?有没有一种直接的方式将String[]
转换为普通数组,如playpicks2
?谢谢!
答案 0 :(得分:0)
你得到“No No No”,因为数组是引用类型。 [1,2] === [1,2]将返回false,因为它们不引用同一个对象。要检查数组相等性,请使用jquery或下划线等库。
http://underscorejs.org/#isEqual
另外,使用Array构造函数很麻烦。为什么不使用文字?
答案 1 :(得分:0)
我宁愿尝试找出导致问题的原因,而不是依靠JQuery或任何奇迹工具来消除麻烦。
基本上,==运算符只进行浅层相等测试。它不会测试数组的每个值,只测试全局数组引用。
在您的情况下,数组包含相同的文字值,但它们仍然是不同的对象,因此==比较失败。
一般的深入比较功能或奇迹JQuery包括可以解决问题,但那将使用原子弹杀死蚂蚁。
我建议你在每个数组like this fiddle shows上使用toString()方法:
var playpicks2 = ["000", "001", "002"];
var allwinning = [
["000", "001", "002"],
["000", "010", "020"],
["000", "011", "022"]];
var playpicks = allwinning[0];
// shallow comparison fails, though console.log shows identical strings
if(playpicks==playpicks2)
console.log("yes they are matched");
else
console.log("No No No! ["+playpicks+"] / ["+playpicks2+"]");
// string value comparison succeeds
if(playpicks.toString()==playpicks2.toString())
console.log("yes they are matched: "+playpicks.toString());
else
console.log("No No No! ["+playpicks+"] / ["+playpicks2+"]");
正如其他人所指出的,我使用了文字的aray符号,它与你的完全相同,只是更紧凑。
我还使用了console.log调试功能,因此您必须激活控制台才能看到小提琴中的内容。