Javascript 使用Math.min从数组中获取最小值和次最小值(不包括0)
我有一个由3个数字组成的数组。如果数字不是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
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