谁最有钱-代码战挑战-JavaScript
你将和一些学生一起去旅行,由你来记录每个学生有多少钱。学生的定义如下: 正如你所知道的,每个学生都有一些五、十和二十。你的工作是把钱最多的学生的名字还给他。如果每个学生的金额相同,则返回“全部” 注: 每个学生都有一个唯一的名字 总会有一个明确的赢家:要么一个人拥有最多,要么每个人拥有相同的数量 如果只有一个学生,那么这个学生的钱最多谁最有钱-代码战挑战-JavaScript,javascript,arrays,class,instance,Javascript,Arrays,Class,Instance,你将和一些学生一起去旅行,由你来记录每个学生有多少钱。学生的定义如下: 正如你所知道的,每个学生都有一些五、十和二十。你的工作是把钱最多的学生的名字还给他。如果每个学生的金额相同,则返回“全部” 注: 每个学生都有一个唯一的名字 总会有一个明确的赢家:要么一个人拥有最多,要么每个人拥有相同的数量 如果只有一个学生,那么这个学生的钱最多 我试过这个: 函数最大值(学生){ //获取总计数组 让数组=[]; students.forEach((值、索引)=>{ 让总数=((5*value.5)+
我试过这个:
函数最大值(学生){
//获取总计数组
让数组=[];
students.forEach((值、索引)=>{
让总数=((5*value.5)+(10*value.tens)+(20*value.twenties));
push([total,value.name]);
});
//总计排序数组
array=array.sort((a,b)=>b[0]-a[0]);
log('array****',array);
//检查所有总数是否相等-如果相等,则返回“全部”
if(array.every((el,i,array)=>(el)[0])==数组[0][0]){
返回“全部”;
}
否则{
返回数组[0][1];
}
}
工作解决方案:)
事实上,我的有一个问题。每一个-我都在做(el)[0])
,而不是el[0]
,然后我也没有正确地检查只有一个学生进入大多数学校
感谢大家对console.log问题的关注。Codewars是console.logging多次,因为正如大家提到的,它正在运行多个测试 我可以建议以下解决方案:
function mostMoney(students) {
//deep copy of argument
let input = [...students];
// sort students by total descending
let sum = st => st.fives * 5 + st.tens * 10 + st.twenties * 20;
let comparator = (st1,st2) => sum(st2) - sum(st1);
input.sort(comparator);
// result
//just compare the first two students
if(input.length >=2 && sum(input[0]) == sum(input[1])){
return 'all';
}
else{
return input[0].name;
}
}
你的意思是你有多个控制台日志?看起来是这样的,即使我在代码中只做了一个console.log:可能你的mostMoney
函数在测试中被多次调用?因此多个控制台日志?代码是针对一系列测试运行的,所以控制台将记录多个数据集。@c_ogo哦,好的-这有助于消除一些混淆。因此,问题仍然在于我的.every()
,我假设-当所有值都相同时,它不会返回true。
function mostMoney(students) {
let array = [];
if (students.length === 1) {
return students[0].name;
}
students.forEach((value, index) => {
let total = ((5 * value.fives) + (10 * value.tens) + (20 * value.twenties));
array.push([total, value.name]);
});
array = array.sort((a, b) => b[0] - a[0]);
if (array.every((el, i, array) => el[0] === array[0][0])) {
return 'all';
}
else {
return array[0][1];
}
}
function mostMoney(students) {
//deep copy of argument
let input = [...students];
// sort students by total descending
let sum = st => st.fives * 5 + st.tens * 10 + st.twenties * 20;
let comparator = (st1,st2) => sum(st2) - sum(st1);
input.sort(comparator);
// result
//just compare the first two students
if(input.length >=2 && sum(input[0]) == sum(input[1])){
return 'all';
}
else{
return input[0].name;
}
}