Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于三值运算符的JavaScript约简_Javascript_Ecmascript 6 - Fatal编程技术网

基于三值运算符的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

我有一段代码可以正常工作。 此代码查找数字数组中的最大值。 有人能把它翻译成简单的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和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也会要求解释,但你还没有给出解释。好吧,他只是要求一个他能理解的“翻译”,我已经提供了一个一步一步的“翻译”。我想他能理解,但我明白你的意思。