我有一段代码可以正常工作。 此代码在数字数组中寻找最大值。 有人可以将其转换为简单的JavaScript(无三元),以便新手程序员可以理解它吗?
const mostVotes = votes.reduce((bestIndex, v, i, arr) => v > arr[bestIndex] ? i : bestIndex, 0);
起初,我试图实现Math.max,但是我需要数组中最大值的索引,因此我追求了reduce和 这就是我试图做的。
const mostVotes = votes.reduce((acc, value, i, arr) => {
if(value > acc) {
return i
}
}, 0)
感谢您的回答,不胜感激!我开始理解这一点,现在更加清楚了。 Javascript reduce和三元语法在一起很合适。
答案 0 :(得分:1)
本质上,您提供的代码正在遍历votes
中的每个元素,并检查它是否大于存储在特定索引处的元素。该索引存储在变量bestIndex
中,用于标记/保留跟踪的索引,该索引包含循环时看到的所有元素中最大的元素。
在您的示例中,您的三元组正在检查给定元素是否大于当前标记的最大元素(通过执行v > arr[bestIndex]
)。在这种情况下,我们然后将当前元素的索引设置为最大元素的新位置(通过隐式返回i
)。如果不是这种情况,则通过隐式返回bestIndex
来保留最大元素的索引。
您可以使用for循环和if语句将其转换为更具程序化的编程风格:
let votes = [-4, 10, 100, -3, 40];
let positionOfMax = 0;
for(let i = 0; i < votes.length; i++) {
if(votes[i] > votes[positionOfMax]) { // v > arr[bestIndex]
positionOfMax = i; // ? i (from ternary)
}
/* Not needed
else {posittionOfMax = positionOfMax} // : bestIndex (from ternary)
*/
}
console.log(positionOfMax);
我鼓励您查看.reduce()
和conditional (ternary) operator上的文档。它们既有用又强大,可以帮助加快开发速度。
答案 1 :(得分:-1)
原始代码可能令人困惑的是缺少括号{}
。
() => 'test'
与() => { return 'test' }
在您的情况下:
(bestIndex, v, i, arr) => v > arr[bestIndex] ? i : bestIndex
(bestIndex, v, i, arr) => {
return (v > arr[bestIndex] ? i : bestIndex)
}
(bestIndex, v, i, arr) => {
if(v > arr[bestIndex])
return i
else
return bestIndex
}
const mostVotes = votes.reduce((bestIndex, v, i, arr) => {
if(v > arr[bestIndex])
return i
else
return bestIndex
}, 0);
答案 2 :(得分:-1)
下面的if/else
应该可以将您带到想要的地方。
if (v > arr[bestIndex]) {
return i
} else {
return bestIndex
}