【问题标题】:JavaScript looping issue in the middle of looping循环过程中的 JavaScript 循环问题
【发布时间】:2021-11-18 12:14:19
【问题描述】:

嘿,伙计们,我正在尝试遍历数字数组,而我希望我的函数做的是,只要数组中数字的位置是偶数,我希望程序改为返回“Yan”字的数量。但是当一个数字的位置是奇数时,我希望它只返回一个数字。

但由于某种原因,在数组中间我得到的是“Yan”字而不是数字。

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
const reversValid1 = valid1.reverse()

const myArray = []

const validateCard = (arr) =>{
    for(let i = 0; i < arr.length; i++){
        if(arr.indexOf(reversValid1[i])%2 == 1){
            console.log('Yan')
        }
        else{
            console.log(arr[i])
        }
    }
}


validateCard(reversValid1)

我收到以下回复:

8 严 8 严 1 严 8 严 9 严 严 严 9 严 5 颜

你可以看到我连续得到 3 颜。

【问题讨论】:

  • 规范不清楚,只要它的位置是偶数..并没有说明输入数组中多次出现的数字。
  • indexOf 返回第一次出现的位置。如果您希望每个偶数位置为“YAN”,您只需在代码中使用i 进行检查即可。

标签: javascript for-loop


【解决方案1】:

为什么不使用indexOf 而不是直接使用i

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
const reversValid1 = valid1.reverse()

const myArray = []

const validateCard = (arr) => {
  for (let i = 0; i < arr.length; i++) {
    if (i % 2 == 1) {
      console.log('Yan')
    } else {
      console.log(arr[i])
    }
  }
}


validateCard(reversValid1)

问题是indexOf 会找到多个相同编号的index

例子:

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
const reversValid1 = valid1.reverse()
for (let i = 0; i < reversValid1.length; i++) {
  console.log(reversValid1[i], reversValid1.indexOf(reversValid1[i]))
}

如您所见,相同的数字具有相同的索引而不是数组的索引。

【讨论】:

  • @Jamal 解决了您的问题吗?你能接受我的回答吗?
【解决方案2】:

你可以使用Array.forEach:

const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
const reversValid1 = valid1.slice().reverse();

const validateCard = (arr) => {
  arr.forEach((v,i)=>{
    if (i%2 == 0) {
      console.log('Yan');
    } else {
      console.log(v);
    }
  });
};

validateCard(reversValid1);

【讨论】:

    【解决方案3】:

    这可能是你想要的:

    const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
    const reversValid1 = valid1.reverse();
    
    const myArray = []
    
    const validateCard = (arr) => {
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] % 2 === 0) {
                console.log('Yan');
            }
            else {
                console.log(arr[i]);
            }
        }
    }
    
    
    validateCard(reversValid1);

    或者这个:

    const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
    const reversValid1 = valid1.reverse();
    
    const validateCard2 = (arr) => {
        for (let i = 0; i < arr.length; i++) {
            if (i % 2 === 0) {
                console.log('Yan');
            }
            else {
                console.log(arr[i]);
            }
        }
    }
    
    validateCard2(reversValid1);

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      相关资源
      最近更新 更多