国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript:侃侃Array的應(yīng)用場(chǎng)景

tommego / 916人閱讀

摘要:目的相信在網(wǎng)上都有很多的的介紹,這里就應(yīng)用場(chǎng)景舉例說明前提了解和一句話概括用別人的方法,完成自己的功能。總結(jié)介紹了和的用法正文部分根據(jù)需求列舉的應(yīng)用場(chǎng)景注意事項(xiàng)優(yōu)化方案

目的
  

相信在網(wǎng)上都有很多的Array的api介紹 , 這里就應(yīng)用場(chǎng)景舉例說明

前提

了解applycall

  

一句話概括:用別人的方法,完成自己的功能。

function Student(name,gender,age){
    this.name = name;
    this.gender = gender;
    this.age = age;

    this.introduce = function () {
        console.log("name : " + this.name + ",
                   gender : " + this.gender + ", age : " +this.age);
    }
}

function Empolyee(name,gender,age,work){

    Student.apply(this,arguments);          //apply方法
    //Student.call(this,name,gender,age);   //call方法

    this.work = work;

}

var e = new Empolyee("lee","male","26","programmer");
console.log(e)
e.introduce();

用Student構(gòu)造函數(shù)的屬性和方法,來為自己所用!

你可能發(fā)現(xiàn)apply和call很相似,apply接受一個(gè)數(shù)組,call接受多個(gè)值。

應(yīng)用:得到一組數(shù)的最大值

var array = [1,5,2,3];

console.log(Math.max.apply(this,array));
                               // 全局寫法


function getMax(){
    return Math.max.apply(this,Array.prototype.slice.apply(arguments));
}                             // 不指定函數(shù)參數(shù)寫法
console.log(getMax(1,2,3,45,3));


function getMax(array){
    return Math.max.apply(this,array);
}                             // 指定參數(shù)寫法
console.log(getMax(array));
正文 扁平化規(guī)則數(shù)組

有這樣的數(shù)組,需要將其扁平化

var array = [[1,2],[3,4],[5,6]];

var result = array.reduce(function (p, c) {
    return p.concat(c);
});
console.log(result);
// [ 1, 2, 3, 4, 5, 6 ]

注解:reduce的callback中,p指代上一個(gè)元素,c指代當(dāng)前元素。
第一次迭代:p -- > [1,2]      c -- > [3,4]
第二次迭代:p -- > [1,2,3,4]  c -- > [5,6]
扁平化隨機(jī)數(shù)組

既然有規(guī)則數(shù)組,那么就肯定有不規(guī)則數(shù)組,這就需要遞歸操作

var array = [1,[2,[3,4],[1,9,8],[" ",3]],1];
// 隨機(jī)嵌套數(shù)組

function flatten(array){
    var result = [];

    array.map(function(ele){
        if(!Array.isArray(ele)){     //判斷是否為數(shù)組
            result.push(ele);
        }else{
            result = result.concat(flatten(ele));
            // 由于result是函數(shù)內(nèi)部定義的,及每次遞歸result都會(huì)重置;
            // 如果不將result保存,則到遞歸完成后,之前的數(shù)據(jù)將會(huì)被覆蓋
        }
    });
    return result;
}
console.log(flatten(array));
// [ 1, 2, 3, 4, 1, 9, 8, " ", 3, 1 ]

注解:map會(huì)迭代數(shù)組里每一個(gè)元素,并應(yīng)用callback函數(shù)對(duì)其操作,在這里就是判斷是否繼續(xù)遞歸。
檢查數(shù)組是否通過給定函數(shù)檢查

有一個(gè)成績(jī)數(shù)組,需要檢查通過和未通過的情況

var score = [56,90,40,80,76,88,94,27,83,66];
// 成績(jī)

function isPassExam(ele,index,array){
    return ele >= 60;
}
// 通過規(guī)則

var isAllPass = score.every(isPassExam);
console.log("is all pass the exam : " + isAllPass);
// is all pass the exam : false

var isSomeonePass = score.some(isPassExam);
console.log("is someone pass the exam : " + isSomeonePass);
// is someone pass the exam : true

var passedScore = score.filter(isPassExam);
console.log("score : " + passedScore);
// score : 90,80,76,88,94,83,66

注解:
 - every會(huì)遍歷所有元素,直到有不能通過函數(shù)檢查的元素為止,返回 false
 - some會(huì)遍歷所有元素,直到有能通過函數(shù)檢查的元素為止,返回true
 - filter會(huì)遍歷所有元素,并將能通過函數(shù)檢查的元素返回
過濾函數(shù)參數(shù)

有時(shí)我們可能需要過濾我們接受的函數(shù)參數(shù),如:只需要number類型

function filter(){
    var array = [];

    Array.prototype.slice.apply(arguments).map(function (ele) {
        if(typeof ele == "number"){
            array.push(ele);
        }
    });

    return array;
    // do something
    // ....
}

var result = filter(1,"123",4,"qianjiahao",2,false,[]);
console.log(result);
// [ 1, 4, 2 ]

注解:由于函數(shù)參數(shù)arguments并不是真正意義上的"數(shù)組",只是"類數(shù)組"
通過  console.log(arguments); 我們可以看到
{ "0": 1,
  "1": "123",
  "2": 4,
  "3": "qianjiahao",
  "4": 2,
  "5": false,
  "6": [] }

arguments是個(gè)"類數(shù)組",在使用"map"方法之前我們需要將其"slice"后轉(zhuǎn)化為"數(shù)組",但是因?yàn)?類數(shù)組"沒有"slice"方法,所以我們使用了"apply",讓Array幫我們完成這個(gè)工作。
亂序字符串/數(shù)組
var str = "6ab3c5de1f4g7";

var array = str.split("");

var result = str.split("").sort(function () {
    return Math.random() > 0.5;
}).join("");
console.log(result);
// d7gfc51a34be7

result = array.sort(function () {
    return Math.random() > 0.5;
});
console.log(result);
// [ "d", "6", "b", "4", "e", "a", "c", "1", "f", "5", "7", "3", "g" ]

注解:通過在sort中隨機(jī)返回一個(gè)數(shù)并與0.5比較,會(huì)得到隨機(jī)的true或false,然后會(huì)隨機(jī)數(shù)組中的前后兩個(gè)元素。
從數(shù)組a中去除數(shù)組b的元素
var a = [1,5,2,6,4,7,9,0];
var b = [1,0,6,4,10];

var result = a.filter(function(ele){
    return b.indexOf(ele) < 0;
});
console.log(result);

注解:通過下標(biāo),判斷a中元素是否在b中,然后用filter過濾

持續(xù)收集ing

注意 for..in..

效率

for..in..迭代效率較低,建議使用for循環(huán)迭代或Array的原生迭代方法。

缺陷 :for..in..會(huì)帶上原型屬性或方法 :

var array = [1,2,3,4];

Array.prototype.newVariable = 100;

Array.prototype.newFunction = function () {};

var result = [];

for(var i in array){
    result.push(array[i]);
}

console.log(result);
// [ 1, 2, 3, 4, 100, [Function] ]

這會(huì)很麻煩,如果需要使用for..in..,需要使用hasOwnProperty()過濾

for(var i in array){
    if(array.hasOwnProperty(i)){
        result.push(array[i]);
    }
}
// [ 1, 2, 3, 4 ]

但是,有個(gè)很蛋疼的事,就是hasOwnProperty()沒有保護(hù)機(jī)制,可以被重寫

var array = [1,2,3,4];

Array.prototype.newVariable = 100;

Array.prototype.newFunction = function () {};

Array.prototype.hasOwnProperty = function (i) {
    return i;
};
// 重寫 hasOwnProperty() 方法

var result = [];

for(var i in array){
    if(array.hasOwnProperty(i)){
        result.push(array[i]);
    }
}

console.log(result);
// [ 1, 2, 3, 4, 100, [Function], [Function] ]
// 又悲劇了。。。

持續(xù)收集ing

優(yōu)化

數(shù)組迭代是可以優(yōu)化的,比如

var array = [1,2,3,4,5,3,7,8];

for(var i = 0;i

這樣的循環(huán),每次都要去獲取array.length,我們可以將array.length存起來

for(var i = 0,len = array.length;i

這樣整個(gè)循環(huán)只需要求一次length。雖然數(shù)據(jù)量小的時(shí)候效果不明顯,但是當(dāng)數(shù)據(jù)量很大時(shí),提升效果就很顯著了。

總結(jié)
 - 介紹了apply和call的用法
 - 正文部分根據(jù)需求列舉Array的應(yīng)用場(chǎng)景 
 - 注意事項(xiàng) 
 - 優(yōu)化方案

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85637.html

相關(guān)文章

  • php開發(fā)微信公眾號(hào)文章付費(fèi)閱讀功能!

    摘要:如上圖,一看就懂,就是一片公眾號(hào)文章,點(diǎn)進(jìn)去顯示標(biāo)題,作者,時(shí)間,公眾號(hào)名稱和部分內(nèi)容,要想閱讀所有內(nèi)容,那就支付元就可以閱讀所有的內(nèi)容,這就是付費(fèi)閱讀當(dāng)然金額可以自定義其實(shí)這個(gè)開發(fā)原理很簡(jiǎn)單,無非就是在文章頁(yè)面加一個(gè)微信支付的按鈕,點(diǎn)擊支 showImg(https://segmentfault.com/img/bV2ZIZ?w=1502&h=1334); 如上圖,一看就懂,就是一片...

    lieeps 評(píng)論0 收藏0
  • php開發(fā)微信公眾號(hào)文章付費(fèi)閱讀功能!

    摘要:如上圖,一看就懂,就是一片公眾號(hào)文章,點(diǎn)進(jìn)去顯示標(biāo)題,作者,時(shí)間,公眾號(hào)名稱和部分內(nèi)容,要想閱讀所有內(nèi)容,那就支付元就可以閱讀所有的內(nèi)容,這就是付費(fèi)閱讀當(dāng)然金額可以自定義其實(shí)這個(gè)開發(fā)原理很簡(jiǎn)單,無非就是在文章頁(yè)面加一個(gè)微信支付的按鈕,點(diǎn)擊支 showImg(https://segmentfault.com/img/bV2ZIZ?w=1502&h=1334); 如上圖,一看就懂,就是一片...

    NotFound 評(píng)論0 收藏0
  • 面試:Semaphore(信號(hào)量)成長(zhǎng)之路

    摘要:最寒冷,面試跳槽不能等馬上就月份了,所謂的金三銀四招聘季。在中有兩種模式,分別是線程池和信號(hào)量,說到這里大家明白了吧,信號(hào)量的作用。感興趣的同學(xué)可以去了解下,講了線程,線程池,鎖,,等內(nèi)容。 2019最寒冷,面試跳槽不能等 馬上就3月份了,所謂的金三銀四招聘季。2019年也許是互聯(lián)網(wǎng)最冷清的一年,很多知名的大型互聯(lián)網(wǎng)公司都裁員過冬。當(dāng)然也有一些公司還在持續(xù)招人的,比如阿里就宣稱不裁員,...

    Lorry_Lu 評(píng)論0 收藏0
  • JavaScript:萬惡this拿命來(一)

    摘要:在腳本中,默認(rèn)指向一個(gè)空對(duì)象,并不是指向,也不是指向。舉個(gè)栗子,在函數(shù)執(zhí)行后,覆蓋原先的值我們?cè)谕獠慷x了一個(gè)名為的全局變量,它會(huì)被默認(rèn)添加到全局的屬性上。總結(jié)在不同的執(zhí)行環(huán)境中的默認(rèn)指代通過省略聲明變量導(dǎo)致變量提升現(xiàn)象的發(fā)生及預(yù)防 侃侃JavaScript中的this this為何如此多變? this總是跟它的執(zhí)行上下文有關(guān),而在JavaScript總會(huì)有開辟新的執(zhí)行上...

    loostudy 評(píng)論0 收藏0
  • javascript 基礎(chǔ)之 call, apply, bind

    摘要:系統(tǒng),扎實(shí)的語言基礎(chǔ)是一個(gè)優(yōu)秀的前端工程師必須具備的。第一個(gè)參數(shù)為調(diào)用函數(shù)時(shí)的指向,隨后的參數(shù)則作為函數(shù)的參數(shù)并調(diào)用,也就是。和的區(qū)別只有一個(gè),就是它只有兩個(gè)參數(shù),而且第二個(gè)參數(shù)為調(diào)用函數(shù)時(shí)的參數(shù)構(gòu)成的數(shù)組。 系統(tǒng),扎實(shí)的 javascript 語言基礎(chǔ)是一個(gè)優(yōu)秀的前端工程師必須具備的。在看了一些關(guān)于 call,apply,bind 的文章后,我還是打算寫下這篇總結(jié),原因其實(shí)有好幾個(gè)。...

    xeblog 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

tommego

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<