【问题标题】:How to return indexes of the filtered values, which equal to num?如何返回过滤值的索引,等于num?
【发布时间】:2022-06-12 01:20:39
【问题描述】:

function fMI(num,arr){
    let digit = arr.toString().split('');
    let realDigit = digit.map(Number);
    console.log("Is RealDigit an array: ",Array.isArray(realDigit));
    console.log(realDigit.filter((v,i,a) => (v==num)? i:''));
}

fMI(1,[1, 11, 34, 52, 61]);

我正在努力从数组中返回值的索引。 到目前为止,我编写的代码采用一个数字并将其与函数接收的数组进行比较。 现在,我正处于想要返回数组值等于函数用于比较的数字的索引的阶段。

我怎样才能做到这一点,因为在过滤方法之后,我只得到了数字 1 的 3 倍,这是不对的。

function fMI(num:number,arr:number[]){
       let digit = arr.toString().split('');
       let realDigit = digit.map(Number);
       console.log("Is RealDigit an array: ",Array.isArray(realDigit));
       console.log(realDigit.filter((v,i,a) => (v==num)? i:''));
}

fMI(1,[1, 11, 34, 52, 61]);

【问题讨论】:

  • 您可能必须使用 .map 而不是 .filter。 Filter 总是返回从你给 .filter 的函数返回 true 的数组值,而使用 .map 你可以在某些条件适用时返回索引。

标签: javascript arrays typescript


【解决方案1】:

您可以使用传统的 for 循环:

function fMI(num, arr) {
  let result = [];
  let numArr = arr.map(item => Number(item));
  for (var i = 0; i < numArr.length; i++) {
    if (numArr[i] == num) {
      result.push(i);
    }
  }
  console.log(result);
}

fMI(1, [1, 11, 34, 52, 61]);

【讨论】:

    【解决方案2】:

    您可以将 forEach 与作为元素索引的第二个参数一起使用。

    function fMI(num: number, arr: number[]) {
      const indexes: number[] = [];
      arr.forEach((value, index) => {
        if (value === num) {
          indexes.push(index);
        }
      })
      return indexes;
    }
    

    你写的 4 行对逻辑没有帮助,这就是我删除它的原因。如果您想知道原因,请对此答案发表评论,我会回复您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-15
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2010-10-10
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多