如何对网页流量二维数组按pageviews与number of users排名并追加排名值
解决方案
核心思路
要实现需求,需要先分别按pageviews和number of users的数值降序排序,生成每个页面对应的排名,再将排名追加到原数组的对应子项末尾。注意原数据中这两个指标是字符串类型,排序前要先转为数值。
JavaScript 实现代码
// 原始数据 const originalData = [['page 1 name','3678','400'],['page 2 name','4000','123'],['page 3 name','3802','750']]; // 生成pageviews的排名映射(降序) const pageViewsSorted = [...originalData].sort((a, b) => parseInt(b[1]) - parseInt(a[1])); const pageRankMap = new Map(); pageViewsSorted.forEach((item, index) => { pageRankMap.set(item[0], String(index + 1)); }); // 生成number of users的排名映射(降序) const usersSorted = [...originalData].sort((a, b) => parseInt(b[2]) - parseInt(a[2])); const userRankMap = new Map(); usersSorted.forEach((item, index) => { userRankMap.set(item[0], String(index + 1)); }); // 生成最终结果 const result = originalData.map(item => [...item, pageRankMap.get(item[0]), userRankMap.get(item[0])]); console.log(result);
Python 实现代码
# 原始数据 original_data = [['page 1 name','3678','400'],['page 2 name','4000','123'],['page 3 name','3802','750']] # 生成pageviews的排名字典(降序) page_views_sorted = sorted(original_data, key=lambda x: int(x[1]), reverse=True) page_rank_map = {item[0]: str(i+1) for i, item in enumerate(page_views_sorted)} # 生成number of users的排名字典(降序) users_sorted = sorted(original_data, key=lambda x: int(x[2]), reverse=True) user_rank_map = {item[0]: str(i+1) for i, item in enumerate(users_sorted)} # 生成最终结果 result = [item + [page_rank_map[item[0]], user_rank_map[item[0]]] for item in original_data] print(result)
代码说明
- 复制与排序:先复制原数组避免修改原始数据,再分别按
pageviews和number of users的数值降序排序; - 映射排名:用Map/字典存储每个页面名称对应的排名(排名从1开始,转为字符串以匹配示例格式);
- 追加排名:遍历原数组,从映射中取出对应排名,追加到子数组末尾。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

