在地图中使用reduce和三元时,我似乎遇到了麻烦

Posted

技术标签:

【中文标题】在地图中使用reduce和三元时,我似乎遇到了麻烦【英文标题】:When using using reduce with ternary inside a map, I seem to have troubles 【发布时间】:2022-01-16 08:25:46 【问题描述】:

这是返回一个数字数组,该数组是基本数组中数组的最大值。当我使用 for 语句时,我可以让它工作。但我试图简化它,但无法弄清楚为什么它不起作用。任何帮助都会得到帮助。

    function largestOfFour(arr) 
      return arr.map((x) => x.reduce((a, c) =>  c > a ? c : a, 0));
    

输入输出示例:

const input = [
  [1,2,3,4,5],
  [6,5,4,3,2,1],
  [1,7,3,4,5,6],
];

function findHighestElements(arr) 
    return arr.map((x) => x.reduce((a, c) =>  c > a ? c : a, 0));


console.log(findHighestElements(input)); // [5,6,7]

【问题讨论】:

请添加输入和预期输出。 什么不起作用?预期的输入和输出是什么?你会得到什么作为输出? [[1, 2, 3][4, 5, 6][7, 8, 9]] -> [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 你没有用逗号分隔数组 【参考方案1】:

你不需要减少,只需Math.max即可。像这样:

function findMaxNumbers(arr) 
  return arr.map((x) => Math.max(...x));


let test = [[1, 2, 3],[4, 5, 6],[7, 8, 9]];
console.log(findMaxNumbers(test));

【讨论】:

【参考方案2】:

如果你有小于零的值,你需要删除起始值

x.reduce((a, c) =>  c > a ? c : a, 0)
                                   ^

或使用非常小的起始值,例如-Number.MAX_VALUE

【讨论】:

【参考方案3】:

要获得所有最大值中的最大值,您可以减少减少量。如果您只想要最大值,请映射减少。

const maxOfArray = a => a.reduce((a, c) => c > a ? c : a, -Number.MAX_SAFE_INTEGER); // thanks to Nina
const conciseVLAZMax = a => Math.max(...a); // thanks to VLAZ 

let a = [
  [1, 2, 3],
  [6, -1, -2],
  [3, 4, 5],
]

let maxs = a.map(maxOfArray);
let maxMax = maxOfArray(maxs);

console.log(maxs);
console.log(maxMax);

【讨论】:

我只使用maxOfArray = xs => Math.max(...xs) 而不是.reduce。无需重新发明***。 感谢 VLAZ。添加。我认为 OP 的印象是 max 函数中存在与 ternery-operator 相关的错误,因此使用 OP 代码具有解释性优势。

以上是关于在地图中使用reduce和三元时,我似乎遇到了麻烦的主要内容,如果未能解决你的问题,请参考以下文章

在 java 澄清中使用 += 和三元运算符

在hadoop map-reduce中运行jar文件时出错

多个三元运算符

在mouseover事件中引用变量时遇到麻烦

我在使用POST发送表单以检索R中的数据时遇到麻烦

麻烦纹理 VBO