【问题标题】:Get Indexes of Filtered Array Items获取过滤后的数组项的索引
【发布时间】:2018-06-03 16:37:16
【问题描述】:

在 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 ... filter 不会改变原始数组。您仍然可以使用原始数组arr 从过滤后的数组中获取索引。
  • 好吧,如果原始数组中的项目具有相同的值怎么办。然后就不行了。

标签: javascript arrays indexing filter


【解决方案1】:

您可以使用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);

【讨论】:

    【解决方案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));

    【讨论】:

      【解决方案3】:

      使用减速器。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-22
        • 2017-12-27
        • 2013-10-03
        • 1970-01-01
        • 2015-09-07
        • 2011-03-17
        相关资源
        最近更新 更多