谷歌搜索我发现这个函数很容易按整数大小排序数组,并在jsfiddle中测试,按预期工作(控制台日志140000,104,99)。
function sortNumber(a,b) {
return b - a;
}
var numArray = [104, 99, 140000];
numArray.sort(sortNumber);
console.log(numArray);
所以我尝试在freeCodeCamp exericse的解决方案中实现它,并且无论如何都无法使其工作。唯一的区别是现在我有一个嵌套数组要处理。所以我想循环遍历arr元素中嵌套的所有数组(例如largetsOfFour),并按大小对数组内的整数进行排序。谁能指出我做错了什么?
function largestOfFour(arr) {
for(var x=0; x<arr.lenght; x++) {
arr[x] = arr[x].sort(function(a,b) { return b - a; });
}
return arr;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 0 :(得分:3)
有一个错字。它应该是arr.length
,而不是arr.lenght
。
由于lenght
中不存在名为arr
的此类属性,因此会返回undefined
。
console.log([].lenght);
// undefined
和undefined
永远无法与数字进行比较。因此,与x
的初始值零相比,它返回false
。
console.log(0 < undefined);
// false
这是因为,当比较一个数字和另一个对象时,它们都将被转换为数字,转换为数字时undefined
将返回NaN
而NaN
将被转换为数字等于NOTHING(甚至不是自己)。
console.log(+undefined);
// NaN
console.log(NaN === NaN);
// false
因此,largestOfFour
中的循环永远不会被执行,因此排序函数也是如此。这就是你的数组根本没有排序的原因。