算法小题2

1、取数组或字符串出现最多的几个元素和出现的次数

function fn(arr,rank,rankType){
    let [obj,resArr,theRank] = [{},[],rank || arr.length];
    for(let i = 0;i<arr.length;i++){
        if(obj[arr[i]]){
            obj[arr[i]]++;
        }else{
            obj[arr[i]] = 1;
        }
    }
    for(let o in obj){
        resArr.push({ele:o,count:obj[o]});
    }
    resArr.sort((n1,n2) => {
        return n2.count - n1.count;
    })
    if(rankType === 'up'){
        resArr.reverse();
    }
    return resArr.splice(0,theRank);
}
fn(arr,3,'down');//传入一个数组或字符串,取降序前三名,降序(如果为up则为升序)

2、筛选数组不需要项

function fn(arr,val,type){
    return arr.filter((item) => {
        return type ? item.toString().indexOf(val) === -1 : item.toString() !== val.toString();
    })
}
fn(arr,val,type);
//第一个参数为数组,第二个值为筛选项,第三个为true时参考下方
//type是true 最后返回在item字符串中没有找到val值的数组
//type为false 最后返回item与val值不等的数组

3、数组扁平化

function fn(arr){
    let newArr = [];
    for(let i = 0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            //如果arr[0] = [1,2]此句就相当于newArr.push(1,2)
            newArr.push.apply(newArr,fn(arr[i]));
        }else{
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
fn(arr);

猜你喜欢

转载自blog.csdn.net/mofigg/article/details/82691416