使用 JavaScript 计算等于或大于循环中索引的元素数

Using JavaScript count the number of elements equal to or higher than the index in a loop

我正在开发一个 JavaScript 函数,它可以创建 authors- H-Index。 H-Index 是一位作者在其他文章中被引用次数最多的出版物。我有

let array = [0,0,0,1,1,2,3,3,5,6,6,7,20,20,20]

这是按升序排列的被引文章数

我需要循环数组直到索引大于等于或大于索引的项目数

比如

for (let i = 1; i < array.length; i++){
  count all items that are above i (0's get skipped)
  if there are more than i then loop to next i if not exit with i - 1
  console.log(i)
 }

我正在寻找的是具有高效循环的 6。感谢帮助

我玩过 map 并在循环内进行过滤,但我似乎无法获得正确的语法

也许不是最有效的方法,但可以使用过滤器来完成。

首先,数组是用方括号 [] 声明的,而不是花括号 {}。所以,它将是:

let array = [0,0,0,1,1,2,3,3,5,6,6,7,20,20,20]

你要求的操作是:

array
   .filter((element, index) => element >= index)
   .length

filter接受的回调可以支持3个参数:

  1. 元素
  2. 指数
  3. 数组

可以找到文档 here

可以反转数组或者降序排序,找到索引(加一)大于值的索引。

const
    values = [0, 0, 0, 1, 1, 2, 3, 3, 5, 6, 6, 7, 20, 20, 20],
    hIndex = [...values].reverse().findIndex((v, i) => v < i + 1);

console.log(hIndex);

接近而不倒退。 Kodos 到 Jonas Wilms.

const
    values = [0, 0, 0, 1, 1, 2, 3, 3, 5, 6, 6, 7, 20, 20, 20],
    length = values.length,
    hIndex = length - values.findIndex((v, i) => v >= length - i);

console.log(hIndex);