为什么857比1000和1001大?Javascript
我有以下问题,我的函数接受一个包含4个数组的数组,每个元素都是一个数字。函数必须返回每个数组的最大元素为什么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([[
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();