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

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.到原数组中 查看第二大值的下标 就是我们想要的结果


版权声明:本文为2202_75964420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。