JS数组

150 阅读2分钟

JS中Array是用于构造数组的全局对象,是按次序排列的一组值,其原型链中包含Array.prototype.
let f = ['a','b']的结果与let f2 = new Array('a','b')相同,但不相等.

Array的两种用法

  1. var a = Array(3) 生成了有三个undefined值的数组.
  2. var a = Array(3,3) 生成长度为2,具有两个值为3的成员.

number\string\boolean是js中的基本类型,特点是:
  • new创建变量时返回的是基本类型.
  • 不用new创建时返回一个复杂类型(对象).
而对象object(array\function)类型的变量加不加new都会生成一个对象.
伪数组:如果该对象的原型链中无Array.prototype就是伪数组(如arguments),如果伪数组的下标符合0,1,2...的形式也可使用数组的遍历方式来进行遍历.

数组常用api:

  1. .forEach( )
  2. forEach方法接受一个函数
    a = [1,2,3,4,5,6,];
    function logArrEle(x,y){
    	console.log('value:'+x,'index:'+y);
    }
    a.forEach(logArrEle);
    

    或者写成:

    a.forEach(function logArrEle(element, index) {
        console.log("a[" + index + "] = " + element);
    });
    

    又或者:

    a.forEach(function(x,y){
        console.log(x,y);
    })
    

    即可打印出数组元素.

  3. .sort( ha ) 参数ha是可选参数,必须为函数.

    sort()方法默认按照unicode的编码升序来排序,会改变自身的顺序.

    var a = [2,5,8,1,4,3];
    a.sort();                             //1, 2, 3, 4, 5, 8
    a.sort(function(x,y) { return x-y;})  //1, 2, 3, 4, 5, 8
    a.sort(function(x,y) { return y-x;})  //8, 5, 4, 3, 2, 1
    

    如果想对一些名词排序,可以为其'关联'相关数值,如:

    a = ['red','green','blue'];
    score = { 
        'red':1,
        'green':2,
        'blue':3
    }
    a.sort(function(x,y){return score[x] - score[y]});  
    //结果就是["red", "green", "blue"]
    
  4. .join( )
    var a = [1,2,3];
    a.join(',');  //以逗号分隔数组元素,产生一个字符串"1,2,3",a本身未改变
    
    Tips:数字变字符串:1+'',数字1就会变成字符串'1'. 数组名+'' 也可产生产生一个字符串副本.
  5. .concat()
    var a = [1,2,3];
    var b = [4,5,6];
    a.concat(b);     //结果是[1, 2, 3, 4, 5, 6]
    var c = a.concat(b);  //则将链接结果保存到c中
    

    利用 concat()复制并产生一个新数组

    var d = a.concat([]);   //d === [1,2,3]
    
  6. .map() map()方法与forEach()方法类似.区别是前者有返回值,而后者无返回值. 用法如下:
    var a = [1,2,3];
    a.map(function(value,key){
        return value * 2;
    })                           //得到结果是[2, 4, 6]
    a.map(value =>value*2);      //此种方法也可得到[2, 4, 6]
    
    

    map方法还可与filter方法连用

    a.filter(function(value,key){
        return value % 2 === 0;
    }).map(function(value){return value*value})   //得到[4, 16, 36, 64, 100]
    
  7. .filter()
    var a =[1,2,3,4,5,6,7,8,9,10];
    a.filter(function(value,key){
        return value % 2 === 0;
    })       //得到偶数[2, 4, 6, 8, 10]
    
  8. .reduce()
    .reduce(function(previousSum,currentValue),primitiveValue)第一个值是一个函数,第二个值是初始值.function中的第一个值是当前和,第二个值是当前值.
    var a =[1,2,3,4,5,6,7,8,9,10];
    a.reduce(function(sum,n){
        return sum+n;
    },0)                        //结果是55