自定义一个数字数组,求数组中第二大数的下标

num_list = [34,6,546,5,100,546,103,546,16,77];

// 复制一个新数组 x 
// x的元素作为键 元素的个数作为值 放到对象中 
// 对新数组进行升序排序 拿到最大值 
// 到对象中找到最大值出现的次数  

// 新数组的长度-最大值出现的次数-1 = 新数组第二大值的下标 

// 根据下新数组第二大值的下标拿到第二大值  

// 到原数组中 查看第二大值的下标 就是我们想要的结果  




// 先排序 
num_list = [34,6,546,5,100,546,103,546,16,77];


function get_second_num_index(arr) {

            // arr 是原数组  

            // 复制一个数组然后排序 
            var newarr = arr.slice(0);

            newarr.sort(function (a, b) {
                return a - b
            });

            // 拿到每个元素出现的次数 需要知道最大值出现的次数 

            // 第二大值的小标 等于 length-最大值出现的次数  
            var res = {};
            // 遍历newarr
            for (var k in newarr) {
                if (res[newarr[k]]) {
                    // newarr[k] 是数组的元素 
                    // res[newarr[k]] 对象中这个键是否存在 存在个数+1
                    res[newarr[k]]++;
                } else {
                    // 不存在个数为1
                    res[newarr[k]] = 1;
                }
            }
            
            // {5:1,6:1,16:1,34:1,77:1,100:1,103:1,546:3}
            // 元素:次数
            var max_num = res[newarr[newarr.length - 1]]; //拿到最大值出现的次数    3 
            // 根据最大值出现的次数 拿到第二大值的下标
            // 第二大值的下标 = length-最大值出现的次数-1
            // 在newarr 中 根据第二大值的下标拿到第二大值的元素 
            // 103
            // 在原数组中找到103的下标
            return arr.indexOf(newarr[newarr.length - max_num-1]); // 
            // newarr中 100的下标   
        }

        num_list = [34,6,546,5,101,103,546,546,16,77];
        console.log(get_second_num_index(num_list));
// 方法二  

// 去重  
// 1.遍历原数组 
// 2.准备一个空数组 
// 3.原数组的元素 如果不在空数组中 那么加进去 如果有了就不加 
// 4. 新数组就是去重以后的 
// 5. 新数组的长度-2 就是第二大值的下标 
// 6.根据下新数组第二大值的下标拿到第二大值  

// 7.到原数组中 查看第二大值的下标 就是我们想要的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值