对象数组-按顺序返回对象并返回平均排名

时间:2019-07-29 07:47:12

标签: javascript arrays sorting object

这是一个实践问题。

说明

您有一个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

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

.sort()对数组进行排序,并且仅 对该数组进行排序。如果从对象数组开始并在其上调用.sort(),则该数组仍将是对象数组,只是(可能)顺序不同。

如果只需要排序的排序数组,则需要.map提取值(排序之前或之后)。您可能还应该为数组使用一个更好的变量名-它是一个数组,而不是一个普通的对象,因此可以将其命名为arrusers(或更准确地描述集合是什么的名称),否则很可能会造成混乱:

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);