关于数组:为什么857大于1000和1001?

Why is 857 larger than 1000 and 1001? Javascript

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
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]]);

结果:

1
Array [ 5, 27, 39, 857 ]

显然它是有效的,但是当我尝试使用最后一个数组[1000,1001,857,1]时,其中1000和1001大于857,我得到857。为什么会这样?


developer.mozilla.org https:///EN /文档/网络/美国/全球_ JavaScript参考/ / /对象数组排序

值是字符串数组排序。如果你想使用一个自定义的排序号码,comparitor功能。

从MDN的文档:

1
2
3
4
5
6
7
8
9
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));

输出:

numberArray: 40,1,5,200
Sorted without a compare function: 1,200,40,5
Sorted with compareNumbers: 1,5,40,200


底线是:8大于1

这是一个一条简明的主题:http://developer.mozilla.org / EN /文档/网络/美国/全球_ JavaScript参考/ / /对象数组排序

试试这个:

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

或只是Math.max()


你使用array#sort法是比较值的字符串,而比AS号码。一个更好的解决方案是使用array.prototype.mapMath.max.apply

1
2
3
4
5
6
7
8
9
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当心功能做一些像这样的

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

函数返回的pop()removes和负载元素的数组。在这个案例中,这将是1001。