javascript数组比较

javascript数组比较,javascript,arrays,comparison,Javascript,Arrays,Comparison,我试图比较javascript中的两个数组 我想要的是: a

我试图比较javascript中的两个数组

我想要的是:

a 因此,非负数数组可以根据需要工作:

firebug> [0,1,2,3,4] < [1,0,0]
true
firebug>[0,1,2,3,4]<[1,0,0]
真的
将负数与零进行比较,结果与预期一致:

firebug> [-1, 1] < [0, 0]
true
firebug>[-1,1]<[0,0]
真的
但是比较负数和负数是。。。令人惊讶的是:

firebug> [-2] < [-1]
false
firebug> -2 < -1
true
firebug>[-2]<[-1]
假的
萤火虫>-2<-1
真的

这里发生了什么,所以我可以纠正我的直觉,在javascript中数组比较意味着什么?

没有任何形式的javascript数组比较类似于您所描述的

在所有情况下都会发生这样的情况:数组首先通过将其内容连接在一起而转换为字符串。因此,字符串“-2”不小于字符串“-1”,因为字符“2”位于字符集中的“1”之后。类似地,“-1,1”小于“0,0”,因为“-”字符位于数字之前

您可以自己看到,在所有情况下,您的比较:

array1 < array2
array1
获得与以下完全相同的结果:

("" + array1) < ("" + array2)
(“”+array1)<(“”+array2)
或:

array1.join(“,”)
该数组被转换为一个字符串,该字符串归结为
.join()
,它依次用逗号(
)作为分隔符连接元素

"-1,1" < "0,0" === true
因为比较了第二个字符代码(第一个字符代码都是
-
,所以还没有给出结果),并且
2
(50)的字符代码大于
1
(49)的字符代码,所以这会产生

它可以归结为字母顺序排序(即通过字符代码),而不是数字排序,即使元素是数字(因为字符串强制)


基本上不建议比较阵列。它隐式地定义为字符串比较,但这会产生令人惊讶的结果。

我找不到一个关于如何在Javascript中实际比较数组并获得“预期”结果的答案,因此下面是代码

compareArrays = function(a, b) {
  var elA, elB, i, len; 
  for (i = 0, len = Math.min(a.length, b.length); i < len; i++) {               
    elA = a[i], elB = b[i];
    if (elA > elB) return 1;
    if (elA < elB) return -1;
  }
  return b.length - a.length;
};

console.log(compareArrays([-2], [-1])) # -1
console.log(compareArrays([], [])) # 0
console.log(compareArrays([null], [undefined])) # 0
console.log(compareArrays([1, 2, 3], [1, 2, 3, 4])) # 1
console.log(compareArrays([0, 2], [0, 1])) # 1
console.log(compareArrays([1], [NaN])) # 0
console.log(compareArrays([NaN], [1])) # 0
compararrays=函数(a,b){
var elA、elB、i、len;
对于(i=0,len=Math.min(a.length,b.length);ielB)返回1;
if(elA
@jAndy:会的,但同样地,它只适用于一个元素数组<代码>-2-1
会更清晰一些…另请参阅,以了解行为的解释和解决方案
"-2" < "-1" === false
compareArrays = function(a, b) {
  var elA, elB, i, len; 
  for (i = 0, len = Math.min(a.length, b.length); i < len; i++) {               
    elA = a[i], elB = b[i];
    if (elA > elB) return 1;
    if (elA < elB) return -1;
  }
  return b.length - a.length;
};

console.log(compareArrays([-2], [-1])) # -1
console.log(compareArrays([], [])) # 0
console.log(compareArrays([null], [undefined])) # 0
console.log(compareArrays([1, 2, 3], [1, 2, 3, 4])) # 1
console.log(compareArrays([0, 2], [0, 1])) # 1
console.log(compareArrays([1], [NaN])) # 0
console.log(compareArrays([NaN], [1])) # 0