Javascript 如果最小值多次出现,如何查找数组的smallet值的所有索引?

Javascript 如果最小值多次出现,如何查找数组的smallet值的所有索引?,javascript,Javascript,正如问题所说,我希望找到所有Math.min值(更具体地说是它们的索引)。如果我的问题不够清楚,也许这个例子会有帮助: 假设我有一个数组[1,31,15,1,7,1]。我想在数组中找到smallet值的索引,它是1-因此程序应该返回[0,3,5]。这是我写的一个小程序: 让arr=[1,31,15,1,7,1]; 设newArr=[]; for(设a=0;aminValue)返回[indxs,minValue] 如果(v

正如问题所说,我希望找到所有Math.min值(更具体地说是它们的索引)。如果我的问题不够清楚,也许这个例子会有帮助:

假设我有一个数组[1,31,15,1,7,1]。我想在数组中找到smallet值的索引,它是1-因此程序应该返回[0,3,5]。这是我写的一个小程序:

让arr=[1,31,15,1,7,1];
设newArr=[];
for(设a=0;a控制台日志(newArr)您的方法使用
拼接更改阵列。这会更改索引,并使给定数组在索引方面无效

相反,您可以将所有值与其索引一起收集,并获得具有多个索引的最小值作为结果

单回路方法:

let array=[100,31,15100,7100],
索引={},
最小值=数字。最大值;
for(让index=0;index最小值)继续;
如果(!index[value])index[value]=[];
如果(索引[值])。推送(索引)==2&&值<最小值)最小值=值;
}

console.log(索引[最小])您的方法使用
拼接更改阵列。这会更改索引,并使给定数组在索引方面无效

相反,您可以将所有值与其索引一起收集,并获得具有多个索引的最小值作为结果

单回路方法:

let array=[100,31,15100,7100],
索引={},
最小值=数字。最大值;
for(让index=0;index最小值)继续;
如果(!index[value])index[value]=[];
如果(索引[值])。推送(索引)==2&&值<最小值)最小值=值;
}
console.log(索引[最小])最佳解决方案是

const arr = [1, 31, 15, 1, 7, 1];
const indexes = arr.reduce(([indxs, minValue], v, ind) => {
  if (v > minValue) return [indxs, minValue]
  if (v < minValue) indxs = []
  indxs.push(ind)
  return [indxs, v]
}, [[], Infinity])[0] 

console.log(indexes) // [0, 3, 5]
const arr=[1,31,15,1,7,1];
常量索引=arr.reduce([indxs,minValue],v,ind)=>{
if(v>minValue)返回[indxs,minValue]
如果(v
最佳解决方案是

const arr = [1, 31, 15, 1, 7, 1];
const indexes = arr.reduce(([indxs, minValue], v, ind) => {
  if (v > minValue) return [indxs, minValue]
  if (v < minValue) indxs = []
  indxs.push(ind)
  return [indxs, v]
}, [[], Infinity])[0] 

console.log(indexes) // [0, 3, 5]
const arr=[1,31,15,1,7,1];
常量索引=arr.reduce([indxs,minValue],v,ind)=>{
if(v>minValue)返回[indxs,minValue]
如果(v
这是O(n)的最佳解决方案之一

让arr=[1,31,15,1,7,1];
设newArr=[];
设最小值=无穷大;
for(设a=0;a控制台日志(newArr)这是O(n)的最佳解决方案之一

让arr=[1,31,15,1,7,1];
设newArr=[];
设最小值=无穷大;
for(设a=0;a控制台日志(newArr)是否总是有小于2^32-1的正整数?是的,1000秒时整数的最大值。是否总是有小于2^32-1的正整数?是的,1000秒时整数的最大值。太多不必要的操作,在大数据上会导致性能太差,请参阅edit.better,但是仍然不需要索引,只需要结果数组,如果下一个值小于最小值make length=0或重新分配一个空数组,仅此而已,您需要保留其他值,然后使用至少两个索引获取最小值。哈哈,我不认为这样做,否则您当然是对的,不必要的操作太多了,在大数据上,它将提供太差的性能,请参见编辑。更好,但仍然不需要索引,只需要结果数组,如果下一个值小于最小值make length=0或重新分配一个空数组,仅此而已否,您需要保留其他值,然后使用至少两个索引的最小值。哈哈,我不认为,否则你当然是对的。嗯,试着用
1000
而不是
1
,记住:“…如果最小值出现多次”。嗯,试着用
1000
而不是
1
,记住:“…如果最小值出现多次”。