[英]method sort not sorting last nested array JavaScript
不知何故,arr [i] .sort()不对最后一个嵌套数组进行排序,结果变糟。 尝试ed FOR and WHILE, different operators, nothing helped. what i
ed FOR and WHILE, different operators, nothing helped. what i
做错了什么? 它返回数组中的最大数字。
function largestOfFour(arr) { var i = 0; while (i != arr.length) { arr[i] = arr[i].sort().pop(); i++; } return arr; } largestOfFour([ [4, 5, 8, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 817, 1] ]);
默认情况下sort()
将元素sort()
为字符串,而不是数字,并且为"1001" < "817"
。 如果要进行数字排序,则需要提供执行数字排序的比较功能。
function largestOfFour(arr) { var i = 0; while (i != arr.length) { arr[i] = arr[i].sort(function(a, b) { return a - b; }).pop(); i++; } return arr; } console.log(largestOfFour([ [4, 5, 8, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 817, 1] ]));
不是您看到的问题的原因(@Barmar回答了该问题),但是您可以将Array.map
与Math.max.apply
一起使用以获取每个列表的最大数目:
function largestOfFour(arr) { return arr.map(function(list) { return Math.max.apply(null, list); }); } console.log(largestOfFour([ [4, 5, 8, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 817, 1] ]));
或更简单的使用ES6:
const largestOfFour = arr => arr.map(list => Math.max(...list))
问题是默认排序-将数组排序为字符串-因此“ 8 ...”>“ 1 ...”
请尝试以下操作:
function cmp(a,b){
return a-b;
}
function largestOfFour(arr) {
var i = 0;
while (i != arr.length) {
arr[i] = arr[i].sort(cmp).pop();
i++;
}
return arr;
}
largestOfFour([
[4, 5, 8, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 817, 1]
]);
输出: [ 8, 27, 39, 1001 ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.