目标
找到 js/index.js
中的,完成其中的 TODO 部分,完成以下目标:
- 找到
groupByAge
函数,groupByAge
接收一个参数,参数为数组对象,age
代表司龄,name
代表人名,返回一个根据司龄进行分组的对象,key
是司龄,value
是一个数组,其中包含了所有当前司龄的人的对象。
- 参数格式示例如下:
[
{ name: "杰克", age: 1 },
{ name: "丽莎", age: 2 },
{ name: "艾娃", age: 5 },
{ name: "约翰", age: 1 },
{ name: "豪尔赫", age: 2 },
]
- 返回值为
object
,格式示例如下:
// 根据司龄(`age`)进行分组,司龄对应司龄人数的数组:
{
1: [{ name: '杰克', age: 1 }, { name: '约翰', age: 1 }], // 司龄为 1 的数组
2: [{ name: '丽莎', age: 2 }, { name: '豪尔赫', age: 2 }], // 司龄为 2 数组
5: [{ name: '艾娃', age: 5 } ]// 司龄为 5 数组
}
- 正确设置 ECharts 图表中的 x 轴和 y 轴数据,x 轴表示司龄,从小到大排序,y 轴表示司龄对应的人数个数。如 1 年司龄的有 4 人,则 y 轴对应的数据为 4。
完成后效果如下:
题解
// 按照年龄分组的函数
const groupByAge = (peoples) => {
// TODO:待补充代码,按照年龄进行分组
let ageres={};
for(let i=0;i<peoples.length;i++){
let age=peoples[i].age
if(ageres[age]){
let arr1=ageres[age]
arr1.push(peoples[i])
ageres[age]=arr1
}else{
let arr2=[]
arr2.push(peoples[i])
ageres[age]=arr2
}
}
return ageres
};
const app = Vue.createApp({
setup() {
const { updateData } = useECharts();
let xAxisData = Vue.ref([]); // X 轴数据,司龄从小到大排列
let seriesData = Vue.ref([]); // Y 轴数据,司龄对应的人数
const groupedPeople = Vue.ref([]); // table 中显示的数据
Vue.onMounted(async () => {
const data = await (await fetch("./mock/data.json")).json();
groupedPeople.value = groupByAge(data); //把请求回来的数据变成需要的数据格式
// TODO: 设置 Echars X 轴数据 xAxisData 和 Y 轴数据 seriesData
// 更新 echars 数据
updateData(xAxisData.value, seriesData.value);
});
return {
groupedPeople,
};
},
});