【发布时间】:2012-07-22 03:03:19
【问题描述】:
我在这方面花了很长时间,但无法发现这里的错误。
基本上,我有一个var test_arr = [['79',0],['8',1],['30', 2],['580',3],['59',4]] 类型的多元数组,它是从一个函数生成的。它的行为不像普通数组,因为我的 sort fxn var sort_arrays = function(a,b) {return a[0]-b[0]}; 无法正确排序数组值。
我已尝试确保我有一个实际的数组,并且我没有调用其他排序方法。
因此:
console.log(arr_test.sort(sort_arrays));
给:[[8,1],[30,2],[59,4],[79,0],[580,3]]
但是,在我的 fxn 上调用它,
console.log(input_kde.sort(sort_arrays));
,给出:[...,[580, 0.002],[59,0.001]]
在尝试生成一些可打印的输出时,我在结果上调用了.toString,并得到了正确排序的输出,这只会加深我的困惑。
我尝试使用parseFloat(a[0]) 进行显式类型转换,但无济于事。
我也尝试确认这确实是一个数组:
console.log(typeof(input_kde)); //#> object
console.log(input_kde.constructor); //#> function Array() { [native code] }
console.log(input_kde instanceof Array); //#> true
另外,input_kde[0] 是一个数组,input_kde[0][0] 是一个数字
console.log(input_kde[0] instanceof Array); //#> true
console.log(typeof(input_kde[0][0])); //#> number
我错过了什么?
edit2
var input_kde = [[22,0.0017095221275204712],[24,0.001712291003699343],[28,0.001716821328044571],[307,0.0009792081392809542],[33,0.0017205981968323918],[34,0.0017211029300063302],[341,0.0010085669284820244],[35,0.0017215244128879188],[387,0.0010558490092862406],[4,0.0016696065108796395],[40,0.0017223891946762664],[448,0.0010667514507313397],[491,0.0010124434821844265],[519,0.0009480280002363708],[580,0.0007465298453339767],[59,0.0017073128314605394]]
【问题讨论】:
-
其他需要确认的事情:(1)那个
input_kde[0]是一个数组。 (2) 实际上正在调用sort_arrays。 (为了调试,您可以临时添加类似if(! window.foo) { console.log("Called sort_arrays"); } window.foo = true;的内容,以便在第一次调用时记录。) (3)input_kde[0][0]是一个字符串。 -
@ruakh (2)
sort_arrays正在被调用,因为 .toString 都不会给出正确答案,我在 arr_test 案例中使用了 sort_arrays。 -
嗯...将结果分配给一个值似乎可以使它起作用。否则返回一个未排序的数组。
标签: javascript multidimensional-array sorting