2018-02-24

1. 對數(shù)組對象屬性排序

思路很簡單,利用sort方法對對象數(shù)組按照對象屬性進行排序许昨,不過不要卡殼了~

var arr = [
      {a: 4, b: 5},
      {a: 2, b: 3},
      {a: 5, b: 2},
      {a: 0, b: 4}
   ];

// 升序
function compare(prop) {
    return function(a, b) {
        return a[prop] - b[prop]
    }
}

console.dir(arr.sort(compare('a')))

2. 數(shù)組的冒泡排序

冒泡排序:隨便從數(shù)組中拿一位數(shù)和后一位比較,如果是想從小到大排序榄融,那么就把小的那一位放到前面莲镣,大的放在后面,簡單來說就是交換它們的位置残拐,如此反復(fù)的交換位置就可以得到排序的效果途茫。

var arr = [3, 1, 3, 4, 3, 44, 23, 54, 123, 6];
function sortA(arr) {
    for (var i = 0; l = arr.length - 1, i < l; i++) {
        for (var j = i + 1; j < l + 1; j++) {
            var cur = arr[i];
            if (cur > arr[j]) {
                var index = arr[j];
                arr[j] = cur;
                arr[i] = index;
            }
        }
    }
    return arr
}
console.log(sortA(arr))

// 改進
function sort(arr) {
    if (arr.length <= 1) return arr;
    for (var i in arr) {
        for (var j in arr) {
            if (arr[i] < arr[j]) {
                var temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr
}

3. 數(shù)組的快速排序

快速排序:從數(shù)組的中間拿一個值遗遵,然后通過這個值挨個和數(shù)組里面的值進行比較匆笤,如果大于的放一邊斤程,小于的放一邊昔字,然后把這些合并捶惜,再進行比較搬卒,如此反復(fù)即可棕兼。

var arr = [9, 1, 3, 4, 67, 44, 23, 54, 123, 6];
function sortB(arr) {
    if (arr.length <= 1) return arr;
    // 獲取中間值的索引
    var len = Math.floor(arr.length / 2),
    // 截取中間值
    cur = arr.splice(len, 1),
    left = [],
    right = [];

    for (var i in arr) {
        cur > arr[i] ? left.push(arr[i]) : right.push(arr[i])
    }
    // 通過遞歸梅掠,上一輪比較好的數(shù)組合并枢析,并且再次進行比較
    return sortB(left).concat(cur, sortB(right))
}
console.log(sortB(arr))

4. 淺拷貝

function copy(obj) {
    // 只拷貝對象
    // slice & concat 可以返回一個新數(shù)組實現(xiàn)淺拷貝 
    if (typeof obj !== 'object') return;
    // 根據(jù)obj的類型判斷是新建一個數(shù)組還是對象
    var newObj = obj instanceof Array ? [] : {};
    // 遍歷obj玉掸,并且判斷是obj的屬性才拷貝
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            newObj[i] = obj[i];
        }
    }
    return newObj;
}

5. 深拷貝

// 對象,數(shù)組以及函數(shù)都可以
var obj = [1, 'df', {a: 5, b: 14}, ['1sd', 'woshi']]
// JSON.parse(JSON.stringify(obj)) 也可以實現(xiàn)深拷貝效果醒叁,只是無法拷貝函數(shù)對象
function deepCopy(obj) {
    if (typeof obj !== 'object') return;
    var newObj = obj instanceof Array ? [] : {};
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            newObj[i] = typeof obj[i] === 'object' ? deepCopy(obj[i]) : obj[i]
        }
    }
    return newObj
}
console.log(deepCopy(obj))

6. 通過防抖防止頁面事件頻繁觸發(fā)

容易頻繁觸發(fā)的事件:resize司浪、scroll泊业、mousedown、mousemove啊易、keyup吁伺、keydown等

<div class="container"></div>
.container{width: 100%; height: 200px; line-height: 200px; color: #fff; background-color: #444; font-size: 30px; text-align: center; margin-top: 100px;}
let container = document.querySelector('.container'),
count = 1,
time,
log = console.log.bind(console);

container.innerHTML = 1
function getUserAction() {
    container.innerHTML = count++;
}

// setTimeout(fn, 0) 表示立即插入隊列而不是立即執(zhí)行
function debounce() {
    count === 1 ? time = setTimeout(getUserAction, 0) : clearTimeout(time);
    time = setTimeout(getUserAction, 1000)
}

// mousemove 移動完成后觸發(fā)
container.addEventListener('mousemove', debounce);

這里 mqyqingfeng 指點,需要將debounce函數(shù)完全抽離出來租谈,所以再改進下代碼

let container = document.querySelector('.container'), count = 1;

function getUserAction() {
    container.innerHTML = count++;
}

function debounce(fn, timer) {
    var time
    return function() {
        ! time ? time = setTimeout(fn, 0) : clearTimeout(time);
        time = setTimeout(fn, timer)
    }
}

container.addEventListener('mousemove', debounce(getUserAction, 1000));

7. 簡單節(jié)流函數(shù)

let container = document.querySelector('.container'),
count = 1,
time,
log = console.log.bind(console);

function getUserAction() {
    container.innerHTML = count++;
}

function throttle(func, wait) {
    var pre = 0;

    return function() {
        var now = +new Date();
        if (now - pre > wait) {
            func.apply(this, arguments);
            pre = now;
        }
    }
}

container.addEventListener('mousemove', throttle(getUserAction, 1000));
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末篮奄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子垦垂,更是在濱河造成了極大的恐慌宦搬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劫拗,死亡現(xiàn)場離奇詭異间校,居然都是意外死亡,警方通過查閱死者的電腦和手機页慷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門憔足,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酒繁,你說我怎么就攤上這事滓彰。” “怎么了州袒?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵揭绑,是天一觀的道長。 經(jīng)常有香客問我郎哭,道長他匪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任夸研,我火速辦了婚禮邦蜜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亥至。我一直安慰自己悼沈,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布姐扮。 她就那樣靜靜地躺著絮供,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茶敏。 梳的紋絲不亂的頭發(fā)上杯缺,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音睡榆,去河邊找鬼萍肆。 笑死,一個胖子當著我的面吹牛胀屿,可吹牛的內(nèi)容都是我干的塘揣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宿崭,長吁一口氣:“原來是場噩夢啊……” “哼亲铡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起葡兑,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奖蔓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后讹堤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吆鹤,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年洲守,在試婚紗的時候發(fā)現(xiàn)自己被綠了疑务。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡梗醇,死狀恐怖知允,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叙谨,我是刑警寧澤温鸽,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站手负,受9級特大地震影響涤垫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虫溜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一雹姊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衡楞,春花似錦吱雏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迷守,卻和暖如春犬绒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兑凿。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工凯力, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茵瘾,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓咐鹤,卻偏偏與公主長得像拗秘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祈惶,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 項目組件化雕旨,顧名思義,就是將項目中的各個模塊按照基礎(chǔ)組建捧请,功能組件凡涩,業(yè)務(wù)組件劃分成一個個單獨的模塊,以使得各個模塊...
    當當靜靜閱讀 416評論 0 1
  • 治國無其法則亂讹蘑,守法而不變則衰。 《慎子·逸文》 句意:治理國家筑舅,沒有法度就會混亂座慰,固守法度而不知變革就會衰落。
    xcy無名閱讀 5,632評論 0 0
  • 今天主課翠拣,晨圈活動部分版仔,還是會有一些“鉛筆盒”地板練習,今天孩子們格外認真误墓。 隨后蛮粮,學習了今天的五個新漢字,但對他...
    相東閱讀 374評論 0 2
  • 文/劉墉 我有一個朋友谜慌,單身半輩子然想,快五十歲時突然結(jié)了婚。新娘跟他的年齡差不多欣范,徐娘半老变泄,風韻猶存,只是知道的朋友...
    長文共賞閱讀 258評論 0 1