Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么857比1000和1001大?Javascript_Javascript_Arrays - Fatal编程技术网

为什么857比1000和1001大?Javascript

为什么857比1000和1001大?Javascript,javascript,arrays,Javascript,Arrays,我有以下问题,我的函数接受一个包含4个数组的数组,每个元素都是一个数字。函数必须返回每个数组的最大元素 function largestOfFour(arr) { var largest = []; for (var i = 0; i < arr.length; i++) { largest.push(arr[i].sort().pop()); } console.log(largest); return largest; } largestOfFour([[

我有以下问题,我的函数接受一个包含4个数组的数组,每个元素都是一个数字。函数必须返回每个数组的最大元素

function largestOfFour(arr) {
  var largest = [];
  for (var i = 0; i < arr.length; i++) {
    largest.push(arr[i].sort().pop());
  }
  console.log(largest);
  return largest;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
显然它是有效的,但当我尝试使用最后一个数组[10001001857,1]时,其中1000和1001大于857,我得到了857。为什么会这样?

数组值按字符串排序。如果要按数字排序,请使用自定义比较器函数

从MDN文档:

var numberArray = [40, 1, 5, 200];

function compareNumbers(a, b) {
  return a - b;
}

console.log('numberArray:', numberArray.join());
console.log('Sorted without a compare function:', numberArray.sort());
console.log('Sorted with compareNumbers:', numberArray.sort(compareNumbers));
输出:

数字雷:40,1,5200
无比较函数排序:1200,40,5
使用比较枚举器排序:1,5,40200


您使用的是
array#sort
方法,该方法将值作为字符串而不是数字进行比较。更好的解决方案是使用
array.prototype.map
Math.max.apply

function largestOfFour(array) {
    return array.map(function(arr) {
        return Math.max.apply(Math,arr);
    });
});

largestOfFour([[4,5,1,3],[13,27,18,26],[32,35,37,39],[1000,1001,857,1]]) 

=> [5,27,39,1001]
您还可以将函数传递给
array#sort
,并执行类似操作

array.sort(function(a,b) { return a - b })

pop()
函数删除并返回数组的最后一个元素。在这种情况下,这将是1001

底线:
8
大于
1

以下是一篇关于这个主题的简明文章:

试试这个:

arr.sort(function(a, b){return a-b}).pop();

或者只是
Math.max()

虽然这是一个有效的建议,但这个答案并不能解释问题寻找原因的效果。请不要参考。是权威的参考资料,对示例很有帮助。好的-谢谢!我现在在手机上。我会在一点时间内解决它。@RobG W3傻瓜页面似乎不再批评W3Schools:“W3Schools仍然存在问题,但他们至少解决了开发人员所关心的主要问题。对于许多初学者,W3Schools组织了教程和游乐场,提供了良好的学习体验。”@KyleStrand——我想w3schools会找到该页面的作者,降低他们的批评,否则将面临法律后果。w3schools仍然是一个商业网站,它兜售商业,它们不需要免费的插件,而且网站内容中仍然存在严重的技术错误。MDN并非没有错误,但至少有兴趣的人都可以修复错误并改进内容。
arr.sort(function(a, b){return a-b}).pop();