在数组的数组中找到最小的数

Posted

技术标签:

【中文标题】在数组的数组中找到最小的数【英文标题】:find the smallest number in a array of an array 【发布时间】:2019-06-13 14:18:42 【问题描述】:

我正在尝试编写一个函数来查找数组的数组中的最小数字。

已经试过了,但是当数组上有数组时我真的不知道该怎么做。

const arr = [4, 8, 2, 7, 6, 42, 41, 77, 32, 9]
const min = Math.min(arr)
console.log(min)

【问题讨论】:

您想要每个数组的最小数字 ([[1,2],[3,4]] -> [1,3]),还是全部 ([[1,2],[3,4]] -> 1)? 最小的个数 您应该在问题中添加此信息以及真实输入(数组数组)的示例。如果这从一开始就是问题的一部分,我很确定@Andy 会发布一个不同的答案。 他肯定会的。 【参考方案1】:

通过采用 ES6,您可以使用 spread syntax ...,它将数组作为参数。

const arr = [4, 8, 2, 7, 6, 42, 41, 77, 32, 9];
const min = Math.min(...arr);

console.log(min);

使用 ES5,你可以使用Function#apply,它使用this 和参数作为数组。

const arr = [4, 8, 2, 7, 6, 42, 41, 77, 32, 9];
const min = Math.min.apply(null, arr);

console.log(min);

对于非扁平数组,采用扁平化函数,例如

const
    flat = array => array.reduce((r, a) => r.concat(Array.isArray(a) ? flat(a) : a), []),
    array = [[1, 2], [3, 4]],
    min = Math.min(...flat(array));

console.log(min);

【讨论】:

这项工作正常,但需要对多个数组执行相同的操作,例如 array=[[1,2][3,4]] 扩展语法允许扩展任何可迭代对象(如数组)。它不仅适用于数组。 为什么不直接使用arr.reduce((r,a) => r.concat(...a)) @d9ngle,它不适用于深层嵌套数组。【参考方案2】:

您可以使用map 遍历嵌套数组,然后在每个数组上使用Math.min(...array) 以获得最小值。 map 的输出是一个最小值数组。

const arr = [[4, 8, 2], [7, 6, 42], [41, 77, 32, 9]];

const out = arr.map(a => Math.min(...a));

console.log(out);

【讨论】:

【参考方案3】:

使用传播...flat

const a = [[0, 45, 2], [3, 6, 2], [1, 5, 9]];

console.log(Math.min(...a.flat()));

或者你可以使用reduce:

const arr = [[7, 45, 2], [3, 6, 2], [1, 5, 9]];

let r = arr.reduce((a, e) => Math.min(a, ...e), Infinity) 

console.log(r);

【讨论】:

@NinaScholz,我添加了另一个选项。

以上是关于在数组的数组中找到最小的数的主要内容,如果未能解决你的问题,请参考以下文章

c语言输入6个整数,存入整数数组int num【6】 求该数数组中所以整数的总和

如何在浮点数数组中创建一个由 1 组成的圆圈

求出100个数组里的最大的前十个数最快的算法,c++

对浮点数数组进行排序[重复]

如何在给定范围内找到数组中的最小值?

浮点数数组的音高检测