繁体   English   中英

方法排序不排序最后一个嵌套数组JavaScript

[英]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.mapMath.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM