我想创建一个函数来确定我花费更多钱的一周中哪一天,如果两天或更多天的金额最高,则应返回包含日期的数组,或者如果输入为null或空数组,该函数应返回null。
但我很困惑。到目前为止,我已经尝试编写按降序对数组进行排序的函数,但它看起来并不正确:
highamount= [50, 100, 2];
highamount.sort(function(amount[0],amount[1])) {
return amount[1]-amount[0];
}
有什么问题?如果我以前没有定义过的数组,并且只是想在调用函数时对它进行排序,那么该函数会出现什么呢?
我是Javascript的新手,我需要帮助。
答案 0 :(得分:2)
highamount.sort(function(amount[0], amount[1]))
,因为您使用额外的括号关闭了comparator
函数。highamount.sort(function(amount[0], amount[1])) ^
compare
函数中声明参数,而是访问未定义的对象/数组amount
。function(amount[0], amount[1]) ^ ^
amount
,这与之前的问题类似。amount[1] - amount[0] ^ ^
sort
功能,它缺少右括号。return amount[1] - amount[0]; }; ^
想象一下,您的代码具有正确的语法:
var highamount = [50, 100, 2];
highamount.sort(function(a, b) {
return a - b;
});
console.log(highamount);
请参阅?你的逻辑很好,因为数组highamount
已被排序。现在您可以获得执行的最大值:highamount[highamount.length - 1]
很好,我们如何改进您的方法,以便从数组highamount
中找到最大值。
最新的Javascript版本提供了完成场景的良好功能:
使用该运算符,您可以逐字传播数组并将其值作为参数传递给其他函数,数组等。
因此,您可以执行以下操作:
var highamount = [50, 100, 2];
var max = Math.max(...highamount);
console.log(max);
请参阅?令人惊讶的是,Javascript如何提供一种可读的方式来完成您的方案。
现在,您写道:如果我之前没有定义过的数组,并且只是想在调用函数时对其进行排序,那么该函数会出现什么呢?
好吧,你可以声明一个接收数组的函数来找到最大值。
运行此代码段:
var highamount = [50, 100, 2];
var findMax = function(array) {
return array === undefined || array === null || array.length === 0 ? null : Math.max(...array);
}
console.log(findMax(highamount));
console.log(findMax(null));
console.log(findMax(undefined));
console.log(findMax([]));
请参阅?函数findMax
根据传递的数组返回最大值。
答案 1 :(得分:1)
您可以使用ES2015 spread syntax和Math.max进行非常简短的单行播放:
const numbers = [1, 5, 74, 27, 2, 8, 442, 12];
const largest = Math.max(...numbers); // > 442
传播语法将numbers
的所有成员作为Math.max
的参数传递。因此,以下两个陈述是等效的:
Math.max(...numbers);
Math.max(1, 5, 74, 27, 2, 8, 442, 12);
答案 2 :(得分:0)
标题问题与帖子正文中提出的问题不同,这就是没有其他人给你正确答案的原因。您需要具有最高值的天数索引数组。在任何一种情况下,都不需要排序。
如果你想要一个最高值的索引数组(或者你所说的天数组)。那么我就是这样做的:
Blob
如果你只想要最高值,你所要做的就是遍历数组。
if (highAmount.length === 0) {
return null;
}
let highest = highAmount[0];
let indexes = [0];
for (var i = 1; i < highAmount.length; i++) {
if (highest < highAmount[i]) {
highest = highAmount[i];
indexes = [i];
}else if(highest = highAmount[i]){
indexes.push(i);
}
}
return indexes;
或者只使用Math.max(... highAmount)