JS對象:數(shù)組

創(chuàng)建數(shù)組

  • 構造函數(shù)
 var a1 = new Array(5);
       console.log(a1.length);//5
       console.log(a1); //[] ,數(shù)組是空的
  • 字面量
  var b = [1, 2, 'hello'];

基本方法:push颖对、pop、shift磨隘、unshift缤底、join、splice番捂、sort个唧、join、reverse设预、concat;

var arr = [ 0,1,1,2,3,5,8,13,21,34,55]
arr.push("a");
console.log(arr);
arr.pop("a");
console.log(arr);
arr.unshift("a");
console.log(arr);
arr.shift("a");
console.log(arr);
arr.splice(2,2,"a" ,"b");
console.log(arr);
console.log(arr.join("/"));
var arr1=["b"];
console.log(arr.concat(arr1));
console.log(arr);
console.log(arr.reverse());
console.log(arr.sort());
arr.sort(function(v1,v2){
    return v1 - v2;
})
console.log(arr);

用 splice函數(shù)分別實現(xiàn) push徙歼、pop、shift鳖枕、unshift方法魄梯。

  function push(arr, value){
    arr.splice(arr.length, 0, value)
    return arr.length
}
var arr = [3, 4, 5]
arr.push(10)
  function pop(arr){
        arr.splice(arr.length-1,1,0)
        return arr.length;
    }
    arr.pop();
    console.log(arr);
    function unshift(arr,value){
        arr.splice(0,0,value)
        return arr.length
    }
    arr.unshift(1);
    console.log(arr);
    function shift(arr){
        arr.splice(0,1,0)
        return arr.length;
    }
    arr.shift();
    console.log(arr);

ES5 數(shù)組拓展

  • .indexOf(element) / .lastIndexOf(element):用于查找數(shù)組內指定元素位置,查找到第一個后返回其索引宾符,沒有查找到返回-1酿秸,indexOf從頭至尾搜索,lastIndexOf反向搜索魏烫。
  • .forEach(element, index, array)
  • .every(function(element, index, array)) / .some(function(element, index, array)):
    這兩個函數(shù)類似于離散數(shù)學中的邏輯判定辣苏,回調函數(shù)返回一個布爾值:
    every是所有函數(shù)的每個回調函數(shù)都返回true的時候才會返回true,當遇到false的時候終止執(zhí)行哄褒,返回false
    some函數(shù)是“存在”有一個回調函數(shù)返回true的時候終止執(zhí)行并返回true稀蟋,否則返回false
  • .map(function(element)):與forEach類似,遍歷數(shù)組呐赡,回調函數(shù)返回值組成一個新數(shù)組返回退客,新數(shù)組索引結構和原數(shù)組一致,原數(shù)組不變
  • .filter(function(element))
    返回數(shù)組的一個子集链嘀,回調函數(shù)用于邏輯判斷是否返回萌狂,返回true則把當前元素加入到返回數(shù)組中,false則不加
    新數(shù)組只包含返回true的值管闷,索引缺失的不包括,原數(shù)組保持不變
  • .reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value):
    遍歷數(shù)組窃肠,調用回調函數(shù)包个,將數(shù)組元素組合成一個值,reduce從索引最小值開始,reduceRight反向碧囊,方法有兩個參數(shù)
    回調函數(shù):把兩個值合為一個树灶,返回結果
    value,一個初始值,可選
    var a = [1,2,3,4,5,6,3,2,1]
    console.log(a.indexOf(2)) //1
    console.log(a.lastIndexOf(2)) //7
    a.forEach(function(e,i,arr){
        arr[i]=e*e;
    });
    console.log(a);//[1, 4, 9, 16, 25, 36, 9, 4, 1]

    console.log( a.every(function(e,i,arr){
        return e > 5;
    }));//false
    console.log( a.some(function(e,i,arr){
        return e > 5;
    }));//true
    console.log(a.map(function(e){
        return e * e
    }));//[1, 16, 81, 256, 625, 1296, 81, 16, 1]
    console.log(a);//[1, 4, 9, 16, 25, 36, 9, 4, 1]
    console.log(a.filter(function(e){
        return e % 2 == 0;
    }))//[4, 16, 36, 4]
    console.log(a)// [1, 4, 9, 16, 25, 36, 9, 4, 1]
    var b = a.reduce(function(v1, v2){
        return v1 + v2 });
    console.log(b);// 105
    var c = a.reduceRight(function(v1, v2){
        return v1 + v2 }, 10)
    console.log(c);//115

范例:

寫一個函數(shù)糯而,操作數(shù)組天通,返回一個新數(shù)組,新數(shù)組中只包含正數(shù)熄驼。

function filterPositive(arr){
  var arr1 = [];
  for(var i = 0; i< arr.length; i++ ){
    if(typeof arr[i] === "number" && arr[i] > 0){
      arr1.push(arr[i])
    }
  }
  return arr1;
}
var arr = [3, -1,  2,  '饑人谷', true]
var arr = filterPositive(arr)
console.log(arr)   // [3,2]

對以下代碼 users中的對象像寒,分別以 name 字段、age 字段瓜贾、company 字段進行排序

   var users = [
        { name: "John", age: 20, company: "Baidu" },
        { name: "Pete", age: 18, company: "Alibaba" },
        { name: "Ann", age: 19, company: "Tecent" }
    ]
    var sortByName = users.sort(function(v1,v2){
        return v1.name > v2.name;
    });
        console.log(sortByName);
    var sortByAge = users.sort(function(v1,v2){
        return v1.age - v2.age;
    });
         console.log(sortByAge);
    var sortByCompany = users.sort(function (v1,v2){
        return v1.company > v2.company;
    } );
    
       console.log(sortByCompany);

實現(xiàn)一個reduce函數(shù)诺祸,作用和原生的reduce類似下面的例子。

   var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); //6
   function reduce(arr,iterate,initValue){
       var tmpArr = (initValue === undefined ?[]:[initValue].concat(arr))
       while(tmpArr.length>1){
           tmpArr.splice(0,2,iterate(tmpArr[0],tmpArr[1]));
       }
       return tmpArr[0];
   }
   var sum = reduce([3,5,6],function(v1,v2){
       return v1 + v2;
   },10);
   console.log(sum);//24

實現(xiàn)一個flatten函數(shù)祭芦,將一個嵌套多層的數(shù)組 array(數(shù)組) (嵌套可以是任何層數(shù))轉換為只有一層的數(shù)組筷笨,數(shù)組中元素僅基本類型的元素或數(shù)組,不存在循環(huán)引用的情況

    function flatten(arr){
        return arr.reduce(function(arr1,arr2){
            return arr1.concat(Array.isArray(arr2)?flatten(arr2):arr2)
        },[])
    }
    function flatten2(arr){
        var newArr= [];
            arr.forEach(function(e){
                if(Array.isArray(e)){
                    newArr=newArr.concat(flatten2(e));
                }else {
                    newArr.push(e);
                }
            })
        return newArr;
    }
var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]]
    var arr1=flatten(arr);
    console.log(arr1);//[3, 2, -4, 5, 7, -3, "aa", "bb"]
    var arr2=flatten2(arr);
    console.log(arr2);//[3, 2, -4, 5, 7, -3, "aa", "bb"]

作者:彭榮輝
鏈接:http://www.reibang.com/u/0f804364a8a8
來源:簡書
著作權歸作者所有龟劲。商業(yè)轉載請聯(lián)系作者獲得授權胃夏,非商業(yè)轉載請注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末昌跌,一起剝皮案震驚了整個濱河市仰禀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌避矢,老刑警劉巖悼瘾,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異审胸,居然都是意外死亡亥宿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門砂沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烫扼,“玉大人,你說我怎么就攤上這事碍庵∮称螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵静浴,是天一觀的道長堰氓。 經(jīng)常有香客問我,道長苹享,這世上最難降的妖魔是什么双絮? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上囤攀,老公的妹妹穿的比我還像新娘软免。我一直安慰自己,他們只是感情好焚挠,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布膏萧。 她就那樣靜靜地躺著,像睡著了一般蝌衔。 火紅的嫁衣襯著肌膚如雪榛泛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天胚委,我揣著相機與錄音挟鸠,去河邊找鬼。 笑死亩冬,一個胖子當著我的面吹牛艘希,可吹牛的內容都是我干的。 我是一名探鬼主播硅急,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼覆享,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了营袜?” 一聲冷哼從身側響起撒顿,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荚板,沒想到半個月后凤壁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡跪另,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年拧抖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片免绿。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡唧席,死狀恐怖,靈堂內的尸體忽然破棺而出嘲驾,到底是詐尸還是另有隱情淌哟,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布辽故,位于F島的核電站徒仓,受9級特大地震影響,放射性物質發(fā)生泄漏誊垢。R本人自食惡果不足惜掉弛,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一喻杈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狰晚,春花似錦、人聲如沸缴啡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽业栅。三九已至秒咐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碘裕,已是汗流浹背携取。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帮孔,地道東北人雷滋。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像文兢,于是被迫代替她去往敵國和親晤斩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • 基礎篇NumPy的主要對象是同種元素的多維數(shù)組姆坚。這是一個所有的元素都是一種類型澳泵、通過一個正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,115評論 0 18
  • Javascript有很多數(shù)組的方法,有的人有W3C的API兼呵,還可以去MDN上去找兔辅,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,068評論 0 6
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,764評論 0 38
  • 我有一個很好很好的媽媽击喂,今天媽媽有些不舒服维苔,疑似感冒,看著媽媽坐在床邊的側影(此處省略100字)茫负,內心真得很難過蕉鸳。
    年糕的日常閱讀 375評論 0 0
  • 說到堅持,周圍很多人都會去說堅持最自己有益的忍法。比如說堅持跑步潮尝、堅持讀書等等。但是現(xiàn)在感覺白巖松說的很對饿序,當愛...
    寒江獨酌001閱讀 349評論 0 0