5

数组

数组是比较简单的内容,这里介绍数组常用的操作。
数组的创建和初始化非常简单,你可以通过var arr = new Array()或者var arr = new Array('a','b','c')来创建一个数组。当然也可以简单的var arr = [];这也是最通常的用法。

添加和删除元素

需要在数组末端追加元素,我们可以简单的使用number[number.length] = 10;或者位面通常用到的number.push(10)。如果是在数组起始端添加元素,位面可以使用number.unshift(0).
相应的在数组中删除元素,我们可以用number.pop()(从末端删除),或者number.shift()(从起始端删除)。还有我们也可以通过设置数组的长度来删除数组,比如var number = [1,2,3,4];number.length=3;来删除最后一个元素。
这里还有一个很常用的方法来添加,删除和修改元素,同时它也可以克隆数组。这个就是splice.
var number = [1,2,3];
number.splice(1,1,4);//修改index为1的之后1位元素为4
number.splice(1,1,4);//将4添加到index为1的元素后面
number.splice(1,1);//删除index为1后1位的元素
var clone = number.splice(0);//用于克隆数组

数组常用方法

  1. concat--连接2各或者更多数组,并返回结构。

  2. every--对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.

  3. filter--对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。

  4. forEach--对数组中的每一项运行给定函数。

  5. join--将所有的数组元素连接成一个字符串。

  6. indexOf--返回第一个与给定参数相等的数组元素的索引,没有则返回-1

  7. lastIndexOf--返回在数组中搜索到的与给定参数相等的元素的索引里最大的项。

  8. map--对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

  9. reverse--颠倒数组中元素的顺序。

  10. slice--传入索引值,将数组对应索引范围内的元素作为新数组返回。

  11. some--对数组中的每一项运行给定函数,如果任一项返回true,则返回true。

  12. sort--按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数。

  13. toString--将数组作为字符串返回

  14. valueOf--将数组作为字符串返回

数组合并

可以通过concat方法来合并多个数组。concat方法可以向一个数组传递数组,对象或者元素。数组会按照该方法传入的顺序连接指定数组。

var zero = 0;
var positive = [1,2,3];
var negative = [-3,-2,-1];
var numbers = negative.concat(zero,positive);

迭代器函数

前面介绍了很多用于迭代数组的函数。下面来举一个例子,有一个数组,它是从1到10.找出数组中的偶数。

var isEven = function(x){
  console.log(x);
  return (x%2==0) ? true : false;
}
var numbers = [1,2,3,4,5,6,7,8,9,10];

首先我们尝试用every.它会迭代数组中的每一个元素,直到返回false。

numbers.every(isEven);  

这样数组numbers的第一个元素是1,它不是偶然,函数返回false。every执行结束了。
然后在看some.它与every类似,只是它运行到true之后停止执行。这样当执行到2的时候,函数返回true便停止了。

numbers.some(isEven);

再看map函数,它会返回每个元素处理后的结果。

var result = numbers.map(isEven);

结果是[false,true,false,true,false,true,false,true,false,true].
还有一个filter方法,它返回的新数组由使函数返回true的元素组成:

var eventNumbers = numbers.filter(isEven); 

这样evenNumbers数组中的元素都是偶数[2,4,6,8,10].
最后再看一下reduce方法。它接受一个函数作为参数,这个函数后4个参数:previousValue,currentValue,index,array.这个函数会返回一个将被叠加到累加器的值,reduce方法停止执行后会返回这个累加值。如果是对一个数组中的所有元素求和,这个方法很有用。

搜索和排序

对于排序我们可以使用sort方法,默认的sort方法会对数字按大小排序,对字符串按字母表排序,比如

numbers.sort()

或者可以自定义排序方法

numbers.sort((a,b)=>{return a-b});

对于自定义字符串的排序

var names = ['Ana', 'ana', 'john', 'John'];
names.sort(function(a,b){
    if(a.toLowerCase()<b.toLowerCase()){
        return -1;
    }
    if(a.toLowerCase()>b.toLowerCase()){
        return 1;
    }
    return 0;
}

参考书籍:Learning Javascript Data Structures and Algorithms

推荐一个找vue,angular组件的轮子工厂


AshleyLv
839 声望38 粉丝

他拿着一件斗篷 扮演着一条龙