将数组元素与for循环相乘

时间:2018-09-27 17:21:35

标签: javascript arrays for-loop

我一直在尝试编写一个函数,其中for循环遍历具有三个数字(票据)的数组,根据其值将每个数组元素相乘,然后返回包含相乘后的值的新数组(技巧) 。我尝试使用for循环来执行此操作,但是,返回的数组仅包含元素编号2,而元素0和1返回空。我要去哪里错了?非常感谢您的帮助!

var bills = [10, 20, 40];

function tipCalc(arr) {
  var tips = [];
  for (i = 0; i < arr.length; i++) {
    if (arr[i] < 10) {
      tips[i] = arr[i] * 0.6;
    } else if (arr[i] > 10 && arr[i] < 20) {
      tips[i] = arr[i] * 0.5;
    } else if (arr[i] > 30) {
      tips[i] = arr[i] * 0.2;
    }
  }
  return tips;
}

console.log(tipCalc(bills)) 

5 个答案:

答案 0 :(得分:4)

您并未涵盖所有情况。

if (arr[i] < 10) {
  tips[i] = arr[i] * 0.6;
} else if (arr[i] > 10 && arr[i] < 20) {
  tips[i] = arr[i] * 0.5;
} else if (arr[i] > 30) {
  tips[i] = arr[i] * 0.2;
}

如果该项目恰好是10怎么办?如果项目介于2030之间怎么办?在您在此处编写的所有if语句中都不会出现这种情况,这可能就是为什么您在返回的数组中缺少某些元素的原因。

要查看是哪一个,可以这样写:

if (arr[i] < 10) {
  tips[i] = arr[i] * 0.6;
} else if (arr[i] > 10 && arr[i] < 20) {
  tips[i] = arr[i] * 0.5;
} else if (arr[i] > 30) {
  tips[i] = arr[i] * 0.2;
} else {
  console.log('Oops! Unhandled case!', arr[i]);
}

答案 1 :(得分:1)

错误是您的条件是不处理arr[i] === 10,而是处理<10>10而不是===10,与 20

尝试

var bills = [10, 20, 40];

function tipCalc(arr) {
  var tips = [];
  for (i = 0; i < arr.length; i++) {
    if (arr[i] <= 10) {
      tips[i] = arr[i] * 0.6;
    } else if (arr[i] > 10 && arr[i] <= 20) {
      tips[i] = arr[i] * 0.5;
    } else if (arr[i] > 30) {
      tips[i] = arr[i] * 0.2;
    }
  }
  return tips;
}

console.log(tipCalc(bills)) 

答案 2 :(得分:0)

您不考虑值等于10或20的情况

var bills = [10, 20, 40];

function tipCalc(arr) {
  var tips = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] <= 10) { //changed here
      tips[i] = arr[i] * 0.6;
    } else if (arr[i] > 10 && arr[i] <= 20) { //changed here
      tips[i] = arr[i] * 0.5;
    } else if (arr[i] > 30) {
      tips[i] = arr[i] * 0.2;
    }
  }
  return tips;
}

console.log(tipCalc(bills))

如果要避免if..else和局部数组变量,可以使用数组映射函数

var bills = [10, 20, 40];

function tipCalc(arr) {
  return arr.map(function(item) {
    let m = 10 >= item ? 0.6 * item : 10 < item && 20 >= item ? 0.5 * item : 30 < item && (0.2 * item);
    return m
  })
}

console.log(tipCalc(bills))

答案 3 :(得分:0)

您的代码没有错,您刚刚错过了10 20的某些条件

var bills = [10, 20, 40];

function tipCalc(arr) {
var tips = [];
for (i = 0; i < arr.length; i++) {
if (arr[i] < 10) {
  tips[i] = arr[i] * 0.6;
} else if (arr[i] >= 10 && arr[i] <= 20) {
  tips[i] = arr[i] * 0.5;
} else if (arr[i] > 30) {
  tips[i] = arr[i] * 0.2;
}
}
return tips;
}

console.log(tipCalc(bills)) 

答案 4 :(得分:0)

var bills = [10, 20, 40];

function tipCalc(arr) {
  return arr.map(function(v){
  	return v <= 10 ? v * 0.6 : (v > 10 && v <= 20 ? v * 0.5 : v * 0.2);
  });

}

console.log(tipCalc(bills))