JS對象:數(shù)組

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

  • 構(gòu)造函數(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ù)分別實(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ù)組內(nèi)指定元素位置,查找到第一個(gè)后返回其索引,沒有查找到返回-1,indexOf從頭至尾搜索,lastIndexOf反向搜索。
  • .forEach(element, index, array)
  • .every(function(element, index, array)) / .some(function(element, index, array)):
    這兩個(gè)函數(shù)類似于離散數(shù)學(xué)中的邏輯判定,回調(diào)函數(shù)返回一個(gè)布爾值:
    every是所有函數(shù)的每個(gè)回調(diào)函數(shù)都返回true的時(shí)候才會返回true,當(dāng)遇到false的時(shí)候終止執(zhí)行,返回false
    some函數(shù)是“存在”有一個(gè)回調(diào)函數(shù)返回true的時(shí)候終止執(zhí)行并返回true,否則返回false
  • .map(function(element)):與forEach類似,遍歷數(shù)組,回調(diào)函數(shù)返回值組成一個(gè)新數(shù)組返回,新數(shù)組索引結(jié)構(gòu)和原數(shù)組一致,原數(shù)組不變
  • .filter(function(element))
    返回?cái)?shù)組的一個(gè)子集,回調(diào)函數(shù)用于邏輯判斷是否返回,返回true則把當(dāng)前元素加入到返回?cái)?shù)組中,false則不加
    新數(shù)組只包含返回true的值,索引缺失的不包括,原數(shù)組保持不變
  • .reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value):
    遍歷數(shù)組,調(diào)用回調(diào)函數(shù),將數(shù)組元素組合成一個(gè)值,reduce從索引最小值開始,reduceRight反向,方法有兩個(gè)參數(shù)
    回調(diào)函數(shù):把兩個(gè)值合為一個(gè),返回結(jié)果
    value,一個(gè)初始值,可選
    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

范例:

寫一個(gè)函數(shù),操作數(shù)組,返回一個(gè)新數(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 字段進(jìn)行排序

   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);

實(shí)現(xiàn)一個(gè)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

實(shí)現(xiàn)一個(gè)flatten函數(shù),將一個(gè)嵌套多層的數(shù)組 array(數(shù)組) (嵌套可以是任何層數(shù))轉(zhuǎn)換為只有一層的數(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.itdecent.cn/u/0f804364a8a8
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基礎(chǔ)篇NumPy的主要對象是同種元素的多維數(shù)組。這是一個(gè)所有的元素都是一種類型、通過一個(gè)正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,290評論 0 18
  • Javascript有很多數(shù)組的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,493評論 0 6
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評論 0 38
  • 我有一個(gè)很好很好的媽媽,今天媽媽有些不舒服,疑似感冒,看著媽媽坐在床邊的側(cè)影(此處省略100字),內(nèi)心真得很難過。
    年糕的日常閱讀 398評論 0 0
  • 說到堅(jiān)持,周圍很多人都會去說堅(jiān)持最自己有益的。比如說堅(jiān)持跑步、堅(jiān)持讀書等等。但是現(xiàn)在感覺白巖松說的很對,當(dāng)愛...
    寒江獨(dú)酌001閱讀 372評論 0 0

友情鏈接更多精彩內(nèi)容