Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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 使用Math.min从数组中获取最小值和次最小值(不包括0)_Javascript_Arrays - Fatal编程技术网

Javascript 使用Math.min从数组中获取最小值和次最小值(不包括0)

Javascript 使用Math.min从数组中获取最小值和次最小值(不包括0),javascript,arrays,Javascript,Arrays,我有一个由3个数字组成的数组。如果数字不是0,我想从该数组中获取最小值和次最小值 假设我的数组如下所示: [459, 25, 0] 在这种情况下,我希望将25报告为最小值,将459报告为次最小值。我可以得到最小的25个,如下所示: var-arr=[459,25,0]; var minimest=Math.min.apply(null,arr.filter(布尔)); 控制台日志(最小)一种方法是使用splice,将第一个数字拼接出来,然后在新拼接阵列上调用Math.min array.sp

我有一个由3个数字组成的数组。如果数字不是
0
,我想从该数组中获取最小值和次最小值

假设我的数组如下所示:

[459, 25, 0]
在这种情况下,我希望将
25
报告为最小值,将
459
报告为次最小值。我可以得到最小的25个,如下所示:

var-arr=[459,25,0];
var minimest=Math.min.apply(null,arr.filter(布尔));

控制台日志(最小)一种方法是使用splice,将第一个数字拼接出来,然后在新拼接阵列上调用Math.min

array.splice(indexOfItem, 1);
那怎么办

let arr = [3,5,10,1,30];
let smallest = Math.min(...arr.filter(n => n != 0));
let second_smallest = Math.min(...arr.filter(n => n != 0 && n > smallest));
console.log(smallest);
console.log(second_smallest);

用户
筛选
排序

var-arr=[459,25,0];
const[minimate,next_minimate]=arr.filter(x=>x).sort((a,b)=>a-b);

console.log(最小,次最小)您可以获取最小值,过滤最小值,然后获取第二小值

var数组=[459,25,0],
最小值=Math.min(…array.filter(Boolean)),
secondminimate=Math.min(…array.filter(v=>v&&v!==minimate));
控制台日志(最小);
console.log(第二个)
const getnthsminest=(n,arr)=>arr.slice().sort()[n-1]

console.log(getnthmisten(2[0,1,2,3].filter(Boolean))
为什么不过滤掉“0”元素,然后对数组排序并选择第二个元素?因为不幸的是数组与另一组数据关联,所以我无法更改顺序您可以先使用arr.slice()创建浅层副本。迭代数组,跟踪两个非零的最小数字。对于一般情况,过滤零,构造一个最小堆,获取最小值,重复(对于任意多个最小值)。第二个最小值呢?@VLAZ,说得好!。我以前错过了。更新为使用过滤器和排序。谢谢。如果您有
[100,7,7]
,这是有问题的,因为两个最小的数字实际上是
7
7
,而不是
100
7