每日一算(日更)

天天練習一點點,天天收穫一點點!!(算法題收集網絡,僅供學習參考)

字符串重複次數

字符串重複次數
var str = 'abcdeacdbe'; //統計字符重複出現的個數;

function findRepeatNum(str) {
    return str.split('').reduce((pre,cur) => {
        if(cur in pre) {
            pre[cur] += 1;
        }else{
            pre[cur] = 1;
        }
        return pre;
    },{})
}
console.log(findRepeatNum(str)) //{a: 2, b: 2, c: 2, d: 2, e: 2}

過濾對象數組中指定的對象

過濾對象數組中指定的對象
var arr1 = [1,2];
var arr2 = [{id:1,name:"s"},{id:2,name:"ds"},{id:3,name:"gg"}]
//過濾方法
arr3 = arr2.filter((item) => !arr1.includes(item.id)); //[{id:3,name:"gg"}]

數組遞歸實現過濾指定項

數組遞歸實現過濾指定項
//測試數據
var data = [{
    isextend:1,                                              
    vaL:0,
    children:[{
        isextend:1,
        vaL:1,
        children:[{
            isextend:0,
            vaL:4
        },{
            isextend:1,
            vaL:5
        }]
    },{
       isextend:1,
       vaL:2,
       children:[]
    },{
       isextend:1,
       vaL:3,
       children:[]
    }]
}]

//過濾方法
function deleteNode(arr, key,targetValue) {
    return arr.filter(function(item, i) {
        if (item.children) {
            item.children = deleteNode(item.children, key,targetValue)
        }
        return item[key] !== targetValue;
    })
}

console.log(deleteNode(data, 'isextend',0))

數組交集補集

數組交集補集
//測試數據(過濾isextend爲0的項)
const a = [1, 2, 3, 4];
const b = [2, 3, 5, 6];

//過濾方法
function filterArr(arr1,arr2,type) {
    let diffArr = [];
    let sameArr = [];
    sameArr = arr1.filter(v => {
        return arr2.some(a => {
            return v == a
        })
    })
    let mergeArr = [...arr1,...arr2];
    diffArr = mergeArr.filter(v => {
        return !sameArr.includes(v)
    })
    if (type == 'same') {
        return sameArr
    } else {
        return diffArr
    }
}

console.log(filterArr(a,b,'same')) // [2,3]
console.log(filterArr(a,b,'diff')) // [1,4,5,6]

獲取當前日期前n天的日期

獲取當前日期前n天的日期
function getIntervalDate(days) {
    let arrDateKeys = [...Array(days).keys()];
    let result = arrDateKeys.map(v => {
    let TimeStampOneDay = 24*60*60*1000;
    let d = new Date(Date.now() - TimeStampOneDay*v);
    let str = `${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`;
        return str
    })
    return result;
}
console.log(getIntervalDate(3)) // ["2019年6月3日", "2019年6月2日", "2019年6月1日"]

數組最大差值

計算數組中的最大差值
var arr = [1,3,5,7,9,0,11,14,8,6]; //在一個整數數組中,一個數字減去它左邊的數字獲得一個差值,求最大差值的數字

function findMaxDiffValue(arr) {
    var minValue = arr[0];
    var MaxDiffValue = 0;
    arr.forEach((v,index) => {
        if(minValue > v) minValue = v;
        var diff = v-minValue;
        if(diff > MaxDiffValue) MaxDiffValue = diff;
    })
    return MaxDiffValue
}
console.log(findMaxDiffValue(arr)) //14

數組重複對象

對數組中重複對象進行操做
//數據樣例
var arr = [
    { time: '20190807', cabin: 'w',  dcp: 37 },
    { time: '20190806', cabin: 'w',  dcp: 37 },
    { time: '20190805', cabin: 'a',  dcp: 37 },
    { time: '20190806', cabin: 'w',  dcp: 37 },
    { time: '20190807', cabin: 'w',  dcp: 37 },
    { time: '20190804', cabin: 'w',  dcp: 37 },
    { time: '20190803', cabin: 'w',  dcp: 37 },
    { time: '20190805', cabin: 'w',  dcp: 37 },
    { time: '20190802', cabin: 'w',  dcp: 37 },
    { time: '20190806', cabin: 'j',  dcp: 37 }, 
] 
//若是time,cabin相同,那麼dcp字段的數值就相加,而且把cabin字段的value取出來變爲一個新的字段加入當前對象,值爲累加次數;
  
function filterArr(arr) {
    return arr.reduce((pre,cur,index) => {
        let {time,cabin,dcp} = cur;
        let isHas = pre.findIndex(v => v.time == time && v.cabin == cabin);
        if(isHas > -1){
            let cur = pre[isHas];
            cur['dcp'] += cur['dcp'];
            cur[cabin]++;
        }else{
            let clone = {...cur,[cabin]:1};
            pre.push(clone)
        }    
        return pre;
    },[])
}
相關文章
相關標籤/搜索