数组
数组是比较简单的内容,这里介绍数组常用的操作。
数组的创建和初始化非常简单,你可以通过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);//用于克隆数组
数组常用方法
concat--连接2各或者更多数组,并返回结构。
every--对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.
filter--对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
forEach--对数组中的每一项运行给定函数。
join--将所有的数组元素连接成一个字符串。
indexOf--返回第一个与给定参数相等的数组元素的索引,没有则返回-1
lastIndexOf--返回在数组中搜索到的与给定参数相等的元素的索引里最大的项。
map--对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
reverse--颠倒数组中元素的顺序。
slice--传入索引值,将数组对应索引范围内的元素作为新数组返回。
some--对数组中的每一项运行给定函数,如果任一项返回true,则返回true。
sort--按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数。
toString--将数组作为字符串返回
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组件的轮子工厂