必须解决的问题是:给你一串0-9之间的数字。 找到这些数字的平均值,并将其作为一个泛整数返回(即:没有小数位),写成字符串。 例如:
“零九五二”->; “四”
如果字符串为空或包含大于9的数字,则返回“n/a”这是我到目前为止的解决方案:
null
function averageString(str) {
var thelast = [];
var obj = {
"zero": 0,
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9
}
var sum = 0;
var nums = []
var string = str.split(" ");
string.forEach(el => {
nums.push(obj[`${el}`])
})
if (str == " ") {
thelast.push("n/a")
} else {
nums.forEach(el => {
if (el > 9) {
thelast.push("n/a")
} else {
sum += el
}
})
var final = Math.floor(sum / nums.length);
for (var prop in obj) {
if (obj[prop] == final) {
thelast.push(prop)
}
}
}
return thelast[0]
}
console.log(averageString("one two ten four five"));
null
但是为什么当解应该是'n/a'时它返回未定义呢?
当您测试空字符串时,您应该测试undefined
,因为大于“9”的数字在obj
变量中没有被定义为键。 函数不能给出大于9的数字,因为您还没有定义这些数字。 这也改进了函数,因为它可以处理其他随机字符串,比如“dog”,或者像“for”这样的拼写错误。
如果(el===未定义){TheLast.Push(“n/a”)}
当前,您的代码正在处理任何大于9,且具有未定义的。 您需要做的是检查该值是否未定义,然后继续在循环中为该值推入“n/a”,如下所示:
string.forEach(el => {
if (obj[`${el}`] === undefined){
nums.push('n/a')
} else{
nums.push(obj[`${el}`])
}
现在,您的nums
数组将如下所示:[1,2,'n/a',4,5]
我会这样做:
function averageString(str) {
var thelast = [];
var obj ={
"zero": 0,
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9
}
var sum = 0;
var nums =[]
var string = str.split(" ");
string.forEach(el => {
if (obj[`${el}`] === undefined){
nums.push('n/a')
} else{
nums.push(obj[`${el}`])
}
})
nums.forEach(el => {
if(el > 9){
thelast.push("n/a")
}else{
sum += el
}
})
if (nums.includes('n/a')){
return 'n/a'
} else{
var final = Math.floor(sum / nums.length);
return final
}
}