我一直在尝试编写一个函数,其中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))
答案 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
怎么办?如果项目介于20
和30
之间怎么办?在您在此处编写的所有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))