Javascript 相同的代码在不同的设备上运行不同
我不熟悉编码,还在学习。我的朋友让我写一个函数,返回数组中第二高的数字,我用array.prototype.sort()完成了这个任务。他说用“”替换“-”以使代码更清晰,这就是问题的根源 我在windows上使用VCS,它不能正常工作。 我朋友用的是mac电脑,一切正常。 在JSFIDLE上试用,一切正常Javascript 相同的代码在不同的设备上运行不同,javascript,arrays,sorting,Javascript,Arrays,Sorting,我不熟悉编码,还在学习。我的朋友让我写一个函数,返回数组中第二高的数字,我用array.prototype.sort()完成了这个任务。他说用“”替换“-”以使代码更清晰,这就是问题的根源 我在windows上使用VCS,它不能正常工作。 我朋友用的是mac电脑,一切正常。 在JSFIDLE上试用,一切正常 const secondMax = (arr) => { return arr.sort((a, b) => b - a)[1]; //does return the cor
const secondMax = (arr) => {
return arr.sort((a, b) => b - a)[1]; //does return the correct number after console.log()
};
const secondMax=(arr)=>{
返回arr.sort((a,b)=>a
“ab”应按升序排序
但无论我使用哪种运算符,排序都会失败,只返回数组中的第二个数字您应该返回一个数字,而不是布尔值。所以第一个是正确的。后者可能在某些javascript引擎上偶然工作,但不能保证一定会工作。
sort
默认情况下将数组排序为String
。如果您传递了一个比较器,那么它是一个函数
,它将取决于两个参数,并且返回
:
- 如果第一个参数小于第二个参数,则为负值
- 如果它们相等,则为0
- 如果第一个参数大于第二个参数,则为正值
var largestNumbers = [];
var firstIndex = (arr[0] < arr[1]) ? 1 : 0;
largestNumbers.push(arr[firstIndex]);
largestNumbers.push(arr[1 - firstIndex]);
for (var i = 2; i < arr.length; i++) {
if (largestNumbers[1] < arr[i]) {
if (largestNumbers[0] < arr[i]) {
largestNumbers[1] = largestNumbers[0];
largestNumbers[0] = arr[i];
}
}
}
var largestNumbers=[];
var firstIndex=(arr[0]
这比排序数组更快,更重要的是,它不会为了找到第二大数字而破坏初始顺序。您的朋友不正确。
.sort()
比较器必须返回小于0、0或大于0的数值;a
或如果您不确定要传递什么或返回什么,可以使用mdn(…)
var largestNumbers = [];
var firstIndex = (arr[0] < arr[1]) ? 1 : 0;
largestNumbers.push(arr[firstIndex]);
largestNumbers.push(arr[1 - firstIndex]);
for (var i = 2; i < arr.length; i++) {
if (largestNumbers[1] < arr[i]) {
if (largestNumbers[0] < arr[i]) {
largestNumbers[1] = largestNumbers[0];
largestNumbers[0] = arr[i];
}
}
}