[3]数组API[2]
Mutator Methods
1 这个部分介绍的API主要有以下几个:
Array.prototype.pop()
Array.prototype.push()
Array.prototype.shift()
Array.prototype.unshift()
Array.prototype.reverse()
Array.prototype.sort()
Array.prototype.splice()
*上面所列举的数组API都会改变当前操作的数组内容。
Array.prototype.pop()
该方法删除数组的最后一个元素,并且返回被删除的元素。[在原来的数组上操作,且有返回值]
语法:arr.pop();
1 | var arr = [1,2,3,4]; |
Array.prototype.push()
该方法将一个或者多个元素插入到数组的最后位置,并且返回新数组的长度。[在原来的数组上操作,并且有返回值]
语法:arr.push(element1[, element2, … , elementN]);
1 | var sports = ['soccer', 'baseball']; |
Array.prototype.shift()
该方法将数组的第一个元素移除,并且返回被移除的数组。[在原来的数组上操作,并且有返回值]
语法:arr.shift();
1 | var myFish = ['angel', 'clown', 'mandarin', 'surgeon']; |
Array.prototype.unshift()
该方法将一个或者多个元素插入到数组的第一个位置,并且返回新数组的长度。[在原来的数组上操作,并且有返回值]
语法:arr.unshift(element1[, element2, …, elementN]);
1 | var arr = [1, 2]; |
Array.prototype.reverse()
该方法将数组中所有元素的位置进行反转。[在原来的数组上操作,并且有返回值]
语法:arr.reverse()
1 | var myArray = ['one', 'two', 'three']; |
Array.prototype.sort()
该方法对数组中所有的元素都进行排序,如果没有提供比较函数compareFunction,则按照字符串的Unicode码的顺序进行排序。[在原来的数组上操作,并且有返回值]
语法:arr.sort([compareFunction])
1 | //比较函数没有提供的情况下: |
compareFunction(a, b)比较函数
- 注意:a,b分别代表数组中比较的两个元素,可以是数值、对象、数组等
- 如果compareFunction(a, b)返回的数值小于0,则a排在b的前面
- 如果compareFunction(a, b)返回的数值为0,则不对a和b进行交换位置。需要注意的是ESMAscript并没有对此行为做出保证,不同的浏览器可能会有不同的做法。
- 如果compareFunction(a, b)返回的数值大于0,则a排在b的后面
compareFunction(a, b)常见的形式如下:
1 | function compare(a, b){ |
Example:
1 | //按数值大小排序 var numbers = [4, 2, 5, 1, 3]; numbers.sort(function(a, b){ return a - b; }); console.log(numbers); //print: [1, 2, 3, 4, 5] //对于对象也可以按照其中的属性值进行排序 var items = [ { name: 'Edward', value: 21 }, { name: 'Sharpe', value: 37 }, { name: 'And', value: 45 }, { name: 'The', value: -12 }, { name: 'Magnetic' }, { name: 'Zeros', value: 37 } ]; items.sort(function(a, b){ if(a.value > b.value){ return 1; } if(a.value < b.value){ return -1; } return 0; }); console.log(items); //-12, 21, 37, 45, undefined, 37; 因为itesms[4]中的对象没有value属性,无法进行比较,所以前面的4个是按顺序排好,最后两个还是原来的顺序。 |
字符串与数值运算小结:
console.log(+true); //print: 1;
console.log(+false); //print: 0;
‘90’ - 80; //results: 10;
‘a’ - ‘b’; //results: NaN;
+’90’; //results: 90;
数值型字符串会先转换成数值再进行运算;而对于非数值型字符串由于无法转换成数值,所以做任何四则运算结果都是NaN
Array.prototype.splice()
该方法可以对数组中已经存在元算进行删除,也可以添加元素到数组中。[在原来的数组上操作,并且有返回值]
语法:arr.splice(startIndex, deleteCount[, element1, element2, …, elementN])
startIndex: 改变数组的起始位置,如果startIndex大于数组的长度,则将数组的长度赋值给startIndex;如果startIndex为负数,则加上数组的长度。
deleteCount: 从startIndex开始,要删除元素的个数;如果deleteCount为0,则不删除数组中的元素,但是此时需要提供至少一个新的元素(即第三个参数);如果deleteCount的数值大于startIndex后面元素的个数,则将从startIndex处开始,将数组后面的元素全部删除。
elementN: 要添加到数组中的元素,如果该参数为空则splice()值做删除操作。
return:返回值是被删除的元素,如果没有删除操作则返回空数组。
1 | var myFish = ['angel', 'clown', 'mandarin', 'surgeon']; |