重寫一些js數(shù)組方法(4)

shift

// 刪除并返回?cái)?shù)組的第一個(gè)元素。

Array.prototype.shift = function () {
    let firstItem = this[0]
    this.splice(0,1)
    return firstItem
}

var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.shift())
console.log(fruits)

slice

Array.prototype.slice = function (start = 0, end = this.length) {
    if (!isNaN(start) && !isNaN(end)) {
        if (Number(start) < 0) {
            start = this.length + Number(start)
        } else {
            start = Number(start)
        }
        let arr = []
        for (let i = start; i < Number(end); i++) {
            arr.push(this[i])
        }
        return arr
    } else {
        throw new Error("傳數(shù)字")
    }
}

console.log([1, 2, 3].slice())  //[ 1, 2, 3 ]


var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
console.log(fruits.slice(1,3)) //[ 'Orange', 'Lemon' ]

some

Array.prototype.some = function(f){
    if(f&&typeof f === "function"){
        for(let i=0;i<this.length;i++){
            if(f(this[i],i,this)){
                return true
            }
        }
        return false
    }else{
        throw new Error("傳函數(shù)")
    }
}

var ages = [3, 10, 18, 20];

function checkAdult(age) {
    return age >= 18;
}

console.log(ages.some(checkAdult)) //true

sort

//小寫大于大寫
console.log("a" > "A")  //true
console.log("a" > "z")  //false
console.log("a" > "Z")  //true

//數(shù)字和字母比較起來(lái)都是false
console.log("a" > 100)  //false
console.log("a" > 0)  //false
console.log("a" > -111111)  //false
console.log(-111111 > "a")  //false

console.log(["a", "A", 100, 11, "Z", "z", 33].sort())
//[
//     100, 11,  33,
//     'A', 'Z', 'a',
//     'z'
//   ]
//   默認(rèn)sort內(nèi)處理是字母大于數(shù)字
// 使用數(shù)字排序颗圣,你必須通過(guò)一個(gè)函數(shù)作為參數(shù)來(lái)調(diào)用!!!

// 所以sort不傳的話只對(duì)字母進(jìn)行排序
// a-b為升序

Array.prototype.sort = function (f) {
    if (f && typeof f === "function") {
        for (let i = 0; i < this.length; i++) {
            for (let j = 0; j < this.length; j++) {
                if (f(this[j],this[i] ) > 0) {
                    let temp = this[j]
                    this[j] = this[i]
                    this[i] = temp
                }
            }
        }

    } else {
        //不細(xì)處理了屁使,大概思路:空數(shù)組a收集英文在岂,原數(shù)組去掉蛮寂,將a排序,再類似concat 插入尾部
    }
}

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b}); //[ 1, 5, 10, 25, 40, 100 ]
console.log(points)

unshift

Array.prototype.unshift = function(){
    let length = arguments.length

    this.length+=length
    for(let i=this.length-1;i>0;i--){
        this[i] = this[i-length]
    }
    
    for(let i=0;i<length;i++){
        this[i] = arguments[i]
    }
    return this.length
}

let arr = [1,2,3]
console.log(arr.unshift(4,5,6,7))  //7
console.log(arr)  
// [
//     4, 5, 6, 7,
//     1, 2, 3
// ] 

splice(比較復(fù)雜)

//JavaScript通過(guò)設(shè)置數(shù)組的length屬性來(lái)截?cái)鄶?shù)組是惟一一種縮短數(shù)組長(zhǎng)度的方法.

Array.prototype.splice = function (index,howmany) {
    if(!isNaN(index)){
        for(let i=0;i<this.length;i++){
            if(Number(index)===i){
                let length =this.length-Number(index)
                if(!isNaN(howmany)){
                    length = howmany
                }else{
                    throw new Error("數(shù)字")
                }

                for(let j=Number(index);j<Number(index)+length;j++){
                    //左移
                    for(let k=Number(index)+1;k<this.length;k++){
                            this[k-1] = this[k]
                    }
                    this.length--
                }
                
                //添加尾項(xiàng)
                for(let l = 2;l<arguments.length;l++){
                    this[Number(index)+l-2] = arguments[l]
                    console.log(Number(index)+length+l-2)
                }
            }
        }
    }else{
        throw new Error("必傳且數(shù)字")
    }
}

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,2,"oh","baby");
console.log(fruits)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末及老,一起剝皮案震驚了整個(gè)濱河市范抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匕垫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異穷蛹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門忽孽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)馋缅,“玉大人,你說(shuō)我怎么就攤上這事萤悴。” “怎么了覆履?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵费薄,是天一觀的道長(zhǎng)硝全。 經(jīng)常有香客問(wèn)我楞抡,道長(zhǎng)伟众,這世上最難降的妖魔是什么召廷? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮竞慢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筹煮。我一直安慰自己,他們只是感情好败潦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劫扒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粟关。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音院塞,去河邊找鬼。 笑死拦止,一個(gè)胖子當(dāng)著我的面吹牛糜颠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萧求,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼元旬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起匀归,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耗帕,失蹤者是張志新(化名)和其女友劉穎穆端,沒(méi)想到半個(gè)月后仿便,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體体啰,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗽仪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钦幔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搀擂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哨颂,到底是詐尸還是另有隱情,我是刑警寧澤相种,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站箫措,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斤蔓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一弦牡、第九天 我趴在偏房一處隱蔽的房頂上張望友驮。 院中可真熱鬧驾锰,春花似錦卸留、人聲如沸椭豫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至今缚,卻和暖如春算柳,著一層夾襖步出監(jiān)牢的瞬間姓言,已是汗流浹背瞬项。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工何荚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人餐塘。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像戒傻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子需纳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354