javascript 我有一个问题,多个输入和访问他们内部的嵌套循环和打印只有一个输出

fnx2tebb  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(80)

我有一个循环练习的问题。我写了3个可能的答案,我的代码每次都失败了。我的计数器失败了,我在变量的作用域和嵌套循环方面有问题。
我有一个食物数组,我必须找到一种元音与长度比例最好的食物,并将其打印到控制台。首先,我尝试创建3个变量,两个用来相互比较,一个用来存储结果,这给了我数组的部分未定义。我期望food3会有i的所有迭代,但它只有i[2],而food2有i[1],i[undefined],i[3]
在我的第二次尝试有2个变量,但我的计数器失败。

const getGets = (arr) => {
  let index = 0;

  return () => {
    const toReturn = arr[index];
    index += 1;
    return toReturn;
  };
};

// Test input
const testInput = [
  '4', 'pizza', 'macaroni', 'kiufte', 'banica'
];

const gets = this.gets || getGets(testInput);
const n = +gets();

let vowels
let food = '';
let ratio
let counter = 0;

for (let i = 1; i <= n; i++) {
  let food1 = gets(); // pizza, undefined, kiufte, undefined
  let food2 = gets();
  let vowels1 = 0
  let vowels2 = 0
  let ratio1 = 0
  let ratio2 = 0

  for (let element of food1) {
    console.log(element) // failed here, because of food1

    if (element === 'a' || element === 'o' || element === 'u' || element === 'e' || element === 'i') {
      counter++;
      continue;
    }
  }
  vowels1 = vowels1 + counter;
  retio1 = vowels1 / food1.length;
  retio2 = vowels2 / food2.length;

  if (ratio1 >= ratio2) {
    ratio1 = ratio
    ratio2 = ratio1
    food1 = food
    food2 = food1
    vowels1 = vowels
    vowels2 = vowels1
  }
  console.log(`${food} ${vowels}/${food.length}`)
  couner = 0;
}
tp5buhyn

tp5buhyn1#

我的答案创建了一个对象来存储结果。然后,它循环遍历传递的数组,并使用正则表达式检查元音的数量。然后它检查元音变量是否有效,如果无效则返回元音数,如果无效则返回0,然后将其除以单词长度。
之后,检查结果对象以查看单词的比率是否大于已经存储的比率。如果新的比率更好,则将其存储。

const testInput = [
  '4', 'pizza', 'macaroni', 'kiufte', 'banica'
];

function compareRatios(input) {
  let result = {"word" : "","ratio" : 0,"vowels" : 0};
  
  input.forEach((word) =>{
    let vowels = word.match(/[aeiou]/gi);
    ratio = ((vowels) ? vowels.length : 0) / word.length
    
    if(result.ratio < ratio)
      result = {"word" : word,"ratio" : ratio,"vowels" : vowels.length};
  });
  
  console.log(`${result.word} ${result.ratio} ${result.vowels}`)
}

compareRatios(testInput)

相关问题