获取过滤数组项的索引

时间:2017-12-21 03:32:19

标签: javascript arrays indexing filter

在JavaScript中,我有以下数组

var arr = [5, 10, 2, 7];

从那个数组中,我想得到一个只包含小于10项的索引的数组。因此,在上面的例子中,索引数组将是

var indexes = [0, 2, 3];

现在,我想要一些类似于filter的东西,但这会返回索引。

如果我尝试filter,这就是它的工作原理

var newArr = arr.filter(function (d) {
    return (d < 10);
});

// newArr will be: [5, 2, 7];

这不是我想要的。我想要以下几行(注意这是一个伪代码)

var indexes = arr.filter(function (d) {
    /* SOMETHING ALONG THE FOLLOWING PSEUDOCODE */
    /* return Index of filter (d < 10); */
});

// indexes will be: [0, 2, 3];

我该怎么做?感谢。

3 个答案:

答案 0 :(得分:5)

使用减速器。

var arr = [5, 10, 2, 7];

var newArr = arr.reduce(function(acc, curr, index) {
  if (curr < 10) {
    acc.push(index);
  }
  return acc;
}, []);


console.log(newArr);

答案 1 :(得分:2)

您只需使用forEach循环:

const arr = [5, 10, 2, 7];


const customFilter = (arr, min) => {
  const result = [];
  arr.forEach((element, index) => {
    if (element < min) {
      result.push(index);
    }
  });
  
  return result;
}

console.log(customFilter(arr, 10));

答案 2 :(得分:2)

您可以使用array#reduce并添加值大于10的索引。

&#13;
&#13;
var arr = [5, 10, 2, 7];
var indexes = arr.reduce((r, d, i) => d < 10 ? (r.push(i), r) : r , []);
console.log(indexes);
&#13;
&#13;
&#13;