这是一个实践问题。
说明
您有一个JavaScript对象数组。每个都包含一个名称(一个字符串)和一个排名(一个数字)。
编写两个函数,一个返回按排名排序的对象,另一个返回平均排名。
我已经对其进行了排序,但是还需要找到平均排名。
代码
let obj = [{name: "bob", ranking: 2}, {name: "rob", ranking: 3}, {name: "cob", ranking: 1}];
const output = obj
.sort((a, b) => a - b);
function avgRanking(num) {
let sum = obj.reduce((previous, current) => current += previous);
let avg = sum / obj.ranking.length;
return avg
}
console.log(output);
console.log(avgRanking()); // NaN
我在做什么错了?
答案 0 :(得分:2)
.sort()
对数组进行排序,并且仅 对该数组进行排序。如果从对象数组开始并在其上调用.sort()
,则该数组仍将是对象数组,只是(可能)顺序不同。
如果只需要排序的排序数组,则需要.map
提取值(排序之前或之后)。您可能还应该为数组使用一个更好的变量名-它是一个数组,而不是一个普通的对象,因此可以将其命名为arr
或users
(或更准确地描述集合是什么的名称),否则很可能会造成混乱:
const users = [{name: "bob", ranking: 2}, {name: "rob", ranking: 3}, {name: "cob", ranking: 1}];
const output = users
.map(obj => obj.ranking)
.sort((a, b) => a - b);
console.log(output);