【js 代码面试题】

1、找出数组里元素最多的第二项

题目:var array = ['aa','bb','bb','cc','cc',"cc"];

思路
1、遍历数组,将重复的冤死进行计数,村委对象;
2、将每个元素的值放到新的数组中,通过 sort 将数组的元素进行排序;
3、获取数组的第二个值,然后遍历循环对象,根据值与对象的匹配度,就可以找出出现元素最多的第二个值 

var array = ['aa','bb','bb','cc','cc',"cc"];
//aa 1
//bb 2
//cc 3
//思路
//1、遍历数组,将重复的冤死进行计数,村委对象;
//2、将每个元素的值放到新的数组中,通过 sort 将数组的元素进行排序;
//3、获取数组的第二个值,然后遍历循环对象,根据值与对象的匹配度,就可以找出出现元素最多的第二个值
function test(arr){
    var map = {};
    //1.遍历数组,将数组每个元素放入 map对象中
    for(var i=0;i<arr.length;i++){
        var v = arr[i];
        var counts = map[v];
        //如果这个元素存在,对应的值计数为1,然后累次计数
        if(counts) {
            map[v] +=1;
        } else{
            map[v] = 1
        }
    }
    console.log(map);//{aa: 1, bb: 2, cc: 3}
    //2.将对象的值放入到新的数组中 arr2
    var arr2 =[];
    for (var g in map){
        arr2.push(map[g])
    }
    console.log(arr2);//[1, 2, 3]

    //3.将 arr2 数组进行从大到小排序
    var arr3 = arr2.sort(function(a,b){
        return b-a
    })
    console.log(arr3);//[3, 2, 1]

    //获取 arr3数组第二个值
    var value = arr3[1];
    //通过数组的值找出对应的键名
    for(var key in map){
        if(map[key] === value){
            return key;
        }
    }
}
test(array)//"bb"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值