筛选数组项的索引获取

7
在 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];

我该怎么做呢?谢谢。


@Li357 - 我试过了,这样行不通。因为地图将被索引到新的过滤数组,这将导致索引发生偏移。 - Greeso
你是什么意思? - Greeso
@Greeso ... filter 不会改变原始数组。您仍然可以使用原始数组 arr 来获取过滤后的数组中的索引。 - ibrahim mahrir
1
那么,如果原始数组中有具有相同值的项目。那么它将无法工作。 - Greeso
3个回答

11

使用reducer。

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);


4
您可以使用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
你可以使用array#reduce方法,将大于10的值的索引相加。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接