[英]JavaScript reduce with ternary operator
我有一段可以正常工作的代码。 此代码查找数字数组中的最大值。 有人可以将它翻译成简单的 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 和三元结合在一起是一个很好的选择。
本质上,您提供的代码是循环遍历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);
原始代码可能令人困惑的是缺少括号{}
。
() => '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);
下面的if/else
应该能让你到达你想去的地方。
if (v > arr[bestIndex]) {
return i
} else {
return bestIndex
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.