如何获取数组中最大3项的索引值?

简介: 一、需求分析1. 数组最大3项看到这个,首先就应该想到排序,我们可以先将数组从大到小进行排序,然后再获取排序后的数组前3项即可。所需函数:排序: sort()获取前3项: filter()2. 获取索引值当我们将数组进行排序后,数组的索引值会发生变化,我们便无法再获取原始数组的索引值了,所以我们得在排序前对数组进行处理。

一、需求分析

1. 数组最大3项

看到这个,首先就应该想到排序,我们可以先将数组从大到小进行排序,然后再获取排序后的数组前3项即可。

所需函数:

排序: sort()
获取前3项: filter()

2. 获取索引值

当我们将数组进行排序后,数组的索引值会发生变化,我们便无法再获取原始数组的索引值了,所以我们得在排序前对数组进行处理。

具体处理思路是,通过遍历将原始数组中的每一项与其索引捆绑在一起,我们可以使用对象数组的形式来实现捆绑,这样即使数组被重新排序,我们最终也能够找到原始数组每项的索引值。

所需函数:

通过遍历创建对象数组: map()

3. 整体实现思路

重构:通过遍历创建对象数组,其中每一项包含索引值和数值 —— map()
排序:根据对象数组每一项中的数值从大到小进行排序 —— sort()
筛选:通过筛选获取排序后的前3项组成数组 —— filter()
提取:通过遍历获取前3项数组的原始索引值 —— map()

二、具体代码实现

function fetchMaxIndex(arr){
    return arr.map(function (item,i) {     //  重构,将数组每项绑定相应索引
        return {
            key: i,
            value: item
        }
    })
    .sort(function (a,b) {     //  排序,根据每项数值排序
        return b.value - a.value;
    })
    .filter(function (item,i) {     //  筛选,获取排序后前三项
        return i < 3
    })
    .map(function (item) {     //  提取,获取前三项原始索引
        return item.key
    });
}
console.log(fetchMaxIndex([4,6,9,3,0,8,1]));   //  [2, 5, 1]

若对以上map()filter()不了解,请戳→简述forEach()、map()、every()、some()和filter()的用法

若想了解以上sort()排序函数的具体用法,请戳→JS数组排序

若想了解更多数组处理函数,请戳→JS数组操作之增删改查

本文重点总结:

对于数组的处理,无非就那么几个常用的函数方法,经常使用便能熟能生巧

相关文章
|
12天前
|
索引 Python
|
2月前
|
存储 语音技术 索引
语音识别,列表的定义语法,列表[],列表的下标索引,从列表中取出来特定的数据,name[0]就是索引,反向索引,头部是-1,my[1][1],嵌套列表使用, 列表常用操作, 函数一样,需引入
语音识别,列表的定义语法,列表[],列表的下标索引,从列表中取出来特定的数据,name[0]就是索引,反向索引,头部是-1,my[1][1],嵌套列表使用, 列表常用操作, 函数一样,需引入
|
2月前
|
前端开发
let array = [{id:‘001‘,name:‘小新‘,age:5},{ id:‘002‘,name:‘小葵‘]这样数据如何遍历,拿到其中一个值,数组中装对象如何获取其中一个固定的值
let array = [{id:‘001‘,name:‘小新‘,age:5},{ id:‘002‘,name:‘小葵‘]这样数据如何遍历,拿到其中一个值,数组中装对象如何获取其中一个固定的值
|
JSON 数据格式
JSON转数组后,筛选分组并输出,判断键值键值是否存在补0
JSON转数组后,筛选分组并输出,判断键值键值是否存在补0
52 0
|
11月前
删除数组中重复出现的值
删除数组中重复出现的值
63 0
数组把key相同值,合并value值(整理)
数组把key相同值,合并value值(整理)
|
前端开发
根据key值过滤形成新得数组
根据key值过滤形成新得数组
65 0
判断某个值是否在多维关联数组中 返回该值的所在的关联数组
判断某个值是否在多维关联数组中 返回该值的所在的关联数组
81 0
for...of 返回索引和值
for...of 返回索引和值