基于三值运算符的JavaScript约简
我有一段代码可以正常工作。 此代码查找数字数组中的最大值。 有人能把它翻译成简单的JavaScript(没有三元组)让新手程序员理解吗基于三值运算符的JavaScript约简,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一段代码可以正常工作。 此代码查找数字数组中的最大值。 有人能把它翻译成简单的JavaScript(没有三元组)让新手程序员理解吗 const mostVotes = votes.reduce((bestIndex, v, i, arr) => v > arr[bestIndex] ? i : bestIndex, 0); 起初,我试图实现Math.max,但我需要数组中最大值的索引,所以我使用reduce和 这就是我想用它做的 const mostVotes = vot
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和Trinal结合在一起非常合适。原始代码可能会混淆的地方是缺少括号
{}
()=>'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
}
本质上,您提供的代码在
投票中循环遍历每个元素,并检查它是否大于存储在特定索引中的元素。该索引存储在变量bestIndex
an中,用于标记/跟踪索引,该索引包含循环时看到的所有元素中最大的元素
在您的示例中,您的三元组检查给定元素是否大于当前标记的最大元素(通过执行v>arr[bestIndex]
)。如果是这种情况,那么我们将当前元素的索引设置为最大元素的新位置(通过隐式返回i
)。如果不是这样,我们通过隐式返回bestIndex
,使最大元素的索引保持原样
通过使用for循环和if语句,您可以将其转换为更程序化的编程风格,如:
let vows=[-4,10100,-3,40];
设最大位置=0;
for(设i=0;i投票[positionOfMax]){//v>arr[bestIndex]
最大位置=i;/?i(从三元)
}
/*不需要
else{positionOfMax=positionOfMax}//:最佳索引(来自三元)
*/
}
控制台日志(最大位置)代码>我试图自己翻译,但代码不起作用。-你应该发布代码。参见。这并不是@Pointy建议的编辑…删除了那个部分。你可以看到三元运算符只是if-else语句的一个简单版本。这并不复杂。你可以很容易地学习。if(v>arr[bestIndex]){return i}else{return bestIndex}
因为前面的部分是什么代码>在v>arr[bestIndex]中?i:bestIndex
是v>arr[bestIndex]
而不是arr[bestIndex]
。您的条件是,如果arr[bestIndex]
是真实的,但原始代码大约是v
比arr[bestIndex]
大,那么第一句话实际上是一个注释,而不是答案。即使你想删除它,OP也会要求解释,但你还没有给出解释。好吧,他只是要求一个他能理解的“翻译”,我已经提供了一个一步一步的“翻译”。我想他能理解,但我明白你的意思。