我正在尝试获取数组中最高值“ 全部”的索引:
let env;
const props = ["customEnvironment", "dev", "qa", "staging", "prod"];
for (let i = 0; i < props.length; i++) {
if (argv[props[i]]) {
env = props[i];
break;
}
}
需要返回[0,1,4,3,4]
。
更新:谢谢大家的快速答复。在阅读了一些较早的评论之后,它为我产生了以下路径:
[2,4]
我知道这有点冗长,但这对我来说很有意义。我最好阅读“ 减少”。
答案 0 :(得分:4)
这里的想法是
max
相同,现在循环遍历数组并添加索引。
let arr = [0,1,4,3,4]
let max = Math.max(...arr)
let op = []
for(let i=0; i<arr.length; i++){
if(arr[i] === max){
op.push(i)
}
}
console.log(op)
另一种替代方法是使用reduce和变量来跟踪最大值,然后访问max
键的值
let arr = [0,1,4,3,4]
let max = null
let op = arr.reduce((op,inp,index)=>{
op[inp] = op[inp] || []
op[inp].push(index)
if(inp > max){
max = inp
}
return op
},{})
console.log(op[max])
答案 1 :(得分:4)
使用Math.max
可以获得最大元素。发布您在数组上的映射并获取此max元素的索引。这种方法的复杂性是 O(n);
const arr = [0,1,4,3,4];
const max = Math.max(...arr);
const res = [];
arr.forEach((item, index) => item === max ? res.push(index): null);
console.log(res);
答案 2 :(得分:2)
首先使用cli <- SolrClient$new(host = "api.plos.org", path = "search", port = NULL)
solr_facet(cli, params = list(q='alcohol', facet.pivot='journal,subject',
facet.pivot.mincount=10))
查找最大值,然后找到索引:
reduce
答案 3 :(得分:1)
这是一个相当简单的版本。获得最大值后,遍历列表以测试每个匹配项,如果相等则添加索引:
const allMax = (xs, max = Math.max(...xs)) =>
xs.reduce((all, x, i) => x == max ? [...all, i] : all, [])
console.log(allMax([0, 1, 4, 3, 4]))
您可以解决此问题以使其一次运行(跳过Math.max
调用),但是代码会更复杂。
这是我提到的第二个版本:
const allMax = (xs) => xs.reduce(
(a, x, i) => x > xs[a[0]] ? [i] : x < xs[a[0]] ? [...a] : [...a, i],
[0]
)
console.log(allMax([0, 1, 4, 3, 4]))
一次完成所有操作。如果您提供一个空列表,它将返回[0]
,这可能是一个问题,但是很难知道该如何处理。一个优点是它将在其他类型的输入上运行。 allMax(['a', 'b', 'd', 'c', 'd']) //=> [2, 4]
。日期也应该起作用,或者您可以与<
进行比较的任何事物。
它并没有我想象的那么复杂。
答案 4 :(得分:1)
这是一个稍微冗长的解决方案,仅迭代一次。这个想法是让您跟踪看到的最高价值,并与之进行比较。
let arr = [0,1,4,3,4];
let maxValue = arr[0];
let maxIndexes = [];
arr.forEach((val, index) => {
if(maxValue === val){
maxIndexes.push(index);
}
if(maxValue < val){
maxValue = val;
maxIndexes = [index];
}
})
console.log(maxIndexes);
答案 5 :(得分:1)
简单地,找到最大值
var max_val = Math.max.apply(null, array)
然后使用reduce函数
var max_val_indexes = arr.reduce(function(arr, ele, i) {
if(ele === max_val)
arr.push(i);
return arr;
}, []);
答案 6 :(得分:1)
要获得预期结果,请使用以下选项
var arr = [0,1,4,3,4]
const maxIndex = arr
.map((v, i, self) => v === Math.max(...self) ? i : -1)
.filter(index => index !== -1);
console.log(maxIndex)
答案 7 :(得分:1)
没有理由找到最大值,然后再次遍历数组 。您只需遍历数组一次:
即可跟踪当前最大值
let arr = [0,1,4,3,4]
let maxIndexes = arr.reduce((maxes, n, i, a) => {
let cur = a[maxes[0]] // current max value
if (cur == undefined || n > cur) return [i]
return (cur == n) ? maxes.concat(i) : maxes
}, [])
console.log(maxIndexes)
答案 8 :(得分:0)
您可以得到两个数组,一个是重复的格言,另一个是格数的索引。请检查以下代码,它可能对您有帮助
let a = [1,3,6,6]
Math.max.apply( Math, a );
let index =[];
let y=0;
let maxValue = a.reduce( function (value,obj){
if(Math.max.apply( Math, a) == obj){
index.push(y);
value.push(obj);
}
++y;
return value;
},[]);
console.log(maxValue);
console.log(index);