如何使代码更具可读性、简捷性和效率,而无需javascript中的任何冗余

如何使代码更具可读性、简捷性和效率,而无需javascript中的任何冗余,javascript,Javascript,我有这样的javascript代码,如何使其更易于阅读、简捷和高效: var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; var count = 0; for (i in numbers) { value = numbers[i]; if (value % 2 == 0) { count++;

我有这样的javascript代码,如何使其更易于阅读、简捷和高效:

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; var count = 0; for (i in numbers) { value = numbers[i]; if (value % 2 == 0) { count++; if (count == 5) { console.log("The 5th even number is " + value); } if (count == 7) { console.log("The 7th even number is " + value); } } } count = 0; for (i in numbers) { value = numbers[i]; if (value % 2 == 1) { count++; if (count == 3) { console.log("The 3rd odd number is " + value); } if (count == 8) { console.log("The 8th odd number is " + value); } } } var odds = [], evens = []; for (i in numbers) { value = numbers[i]; if (value % 2 == 1) { odds.push(value); } else if (value % 2 == 0) { evens.push(value);`enter code here` } } console.log('The odd numbers: ' + odds.join(", ")); console.log('The even numbers: ' + evens.join(", ")); 变量数=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; var计数=0; 用于(i个数字){ 数值=数字[i]; 如果(值%2==0){ 计数++; 如果(计数=5){ console.log(“第5个偶数为”+值); } 如果(计数=7){ console.log(“第七个偶数是”+值); } } } 计数=0; 用于(i个数字){ 数值=数字[i]; 如果(值%2==1){ 计数++; 如果(计数=3){ console.log(“第三个奇数为”+值); } 如果(计数=8){ console.log(“第8个奇数为”+值); } } } var赔率=[],均衡=[]; 用于(i个数字){ 数值=数字[i]; 如果(值%2==1){ 赔率。推(值); }else if(值%2==0){ evens.push(值);`在此处输入代码` } } console.log('奇数:'+赔率.join(“,”); log('偶数:'+evens.join(“,”); 这些代码的结果如下所示:

第五个偶数是10 第七个偶数是14 第三个奇数是5 第八个奇数是15 奇数:1,3,5,7,9,11,13,15,17,19
偶数:2、4、6、8、10、12、14、16、18、20

而不是在同一数组中循环两次并检查偶数和赔率。您只需循环一次,并保留偶数的if语句,而else将是所有奇数。同时,当你通过这个循环时,你可以将这些数字分配给你个人的偶数/赔率数组,而不是再次循环。如果你想让它更具动态性,你可以添加一个如下的函数,当你想做你的控制台日志时,可以得到数字的后缀

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  ordinalSuffixOf = function(i) {
  var j = i % 10,
    k = i % 100;
  if (j == 1 && k != 11) {
    return i + "st";
  }
  if (j == 2 && k != 12) {
    return i + "nd";
  }
  if (j == 3 && k != 13) {
    return i + "rd";
  }
  return i + "th";
},
countEven = 0,
countOdd = 0,
odds = [],
evens = [];

for (i in numbers) {

  value = numbers[i];
  if (value % 2 == 0) {
    evens.push(value);
    countEven++;
    if (countEven == 5 || countEven == 7) {
      console.log("The " + countEven + ordinalSuffixOf(countEven) + " even number is " + value);
    }
  } else {
    odds.push(value);
    countOdd++;
    if (countOdd == 3 || countOdd == 8) {
      console.log("The " + countOdd + ordinalSuffixOf(countOdd) + " odd number is " + value);
    }
  }
}

console.log('The odd numbers: ' + odds.join(", "));
console.log('The even numbers: ' + evens.join(", "));

我会给你一些提示

首先,您可以创建一个循环,将数字添加到数字数组中,而不是手动键入所需的数字

var numbers = [];
for(var i = 1; i <= 20; i++){
    numbers.push(i);
}
您可以将其缩短为:

(value % 2 == 1) ? odds.push(value) : evens.push(value);
有关这些运算符的含义的更多信息,请参阅

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
您的很多“检查偶数”逻辑都是重复的,因此我们可以创建一个helper方法来处理它

var isEven = function(number) {
  return number % 2 === 0;
};
我们可以使用
Array.prototype.filter
仅获取偶数,然后使用
Array.prototype.forEach
迭代这些偶数
forEach()
甚至可以很好地跟踪我们的第个号码

numbers.filter(isEven)
  .forEach(function(number, index) {
    if(index == 5 || index == 7) {
      console.log(`The ${index}th even number is ${number}`);
    }
  });

numbers.filter(!isEven)
  .forEach(function(number, index) {
    if(index == 3) {
      console.log(`The 3rd odd number is ${number}`);
    } else if(index == 8) {
      console.log(`The 8th odd number is ${number}`);
    }
  });
同样,使用
Array.prototype.filter
,我们不必在把东西推到数组中的过程中摸索

var odds = numbers.filter(!isEven);
var evens = numbers.filter(isEven);

console.log(`The odd numbers: ${odds.join(', ')}`);
console.log(`The even numbers: ${evens.join(', ')}`);

由于您使用的是一系列1-20数字数组,所以可以通过单for循环来实现,希望此代码可以帮助您

var evenCount = 0,
  oddCount = 0,
  odds = [],
  evens = [];
for (var i = 1; i <= 20; i++) {

  if (i % 2 == 0) {
    evenCount++;
    evens.push(i);
    if (evenCount == 5) {
      console.log("The 5th even number is " + i);
    }
    if (evenCount == 7) {
      console.log("The 7th even number is " + i);
    }
  } 
  else if (i % 2 == 1) {
    oddCount++;
    odds.push(i);
    if (oddCount == 3) {
      console.log("The 3rd odd number is " + i);
    }
    if (oddCount == 8) {
      console.log("The 8th odd number is " + i);
    }
  }
}



console.log('The odd numbers: ' + odds.join(", "));
  console.log('The even numbers: ' + evens.join(", "));
var evenCount=0,
oddCount=0,
赔率=[],
埃文斯=[];

对于(var i=1;我认为这是一个更好的发布问题的地方,我投票将这个问题作为离题题结束,因为它更适合不做任何解释?@PraveenKumar better?对我来说很好…:)我得到了一个错误,就像这个引用错误:值在eval:14:14在evalI编辑了我的代码检查itIMO,
否则如果(i%2==1){
应该是
否则{
在执行for循环后添加控制台日志这真的帮了我很大的忙,非常好地说明了使用较新的“声明式”迭代器优于旧的“命令式”C样式
for(var i=1;i
var evenCount = 0,
  oddCount = 0,
  odds = [],
  evens = [];
for (var i = 1; i <= 20; i++) {

  if (i % 2 == 0) {
    evenCount++;
    evens.push(i);
    if (evenCount == 5) {
      console.log("The 5th even number is " + i);
    }
    if (evenCount == 7) {
      console.log("The 7th even number is " + i);
    }
  } 
  else if (i % 2 == 1) {
    oddCount++;
    odds.push(i);
    if (oddCount == 3) {
      console.log("The 3rd odd number is " + i);
    }
    if (oddCount == 8) {
      console.log("The 8th odd number is " + i);
    }
  }
}



console.log('The odd numbers: ' + odds.join(", "));
  console.log('The even numbers: ' + evens.join(", "));