/**
* Array 常用方法
*/
join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。
var a = ['Wind', 'Rain', 'Fire'];
var str1 = a.join(); // Wind,Rain,Fire; 默认','
var str2 = a.join(''); // WindRainFire;
var str3 = a.join(', ');
var str4 = a.join('-'); // Wind-Rain-Fire;a
// join Polyfill
// if (!Array.prototype.join) {
// Array.prototype.join = function(item) {
// if (!item) return;
// return this.toString().replace(/,/g, item);
// }
// }
slice(start,end); 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。原始数组不会被修改。
/**
* start: 可选
* 从该处开始提取原数组中的元素(从0开始)如果该参数为负数,
* 则表示从原数组中的倒数第几个元素开始提取,slice(-2)表示提取
* 原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
* 如果省略 begin,则 slice 从索引 0 开始。
*
* end: 可选
* 在该处结束提取原数组元素(从0开始),slice会提取原数组索引从start-end所有元素(包含start,不包含end)。
* slice(1,4) 提取原数组中的第二个元素开始直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。
* 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。
* slice(-2,-1)表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
*
* 如果 end 被省略,则slice 会一直提取到原数组末尾。
* 如果 end 大于数组长度,slice 也会一直提取到原数组末尾。
*/
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2)); // ['camel', 'duck', 'elephant'];
console.log(animals.slice(2, 4)); // ['camel', 'duck'];
console.log(animals.slice(1, 5)); // ['bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(-2));// ['duck', 'elephant'];
console.log(animals.slice(-2, -1)); //['duck']
// Polyfill
(function() {
'use strict';
var _slice = Array.prototype.slice;
try {
_slice.call(document.documentElement);
} catch(e) {
Array.prototype.slice = function (begin, end) {
end = (typeof end !== 'undefined') ? end : this.length;
// 数组
if (Object.prototype.toString.call(this) === '[object Array]') {
return _slice.call(this, begin, end);
}
// 类数组
var i, cloned = [], size, len = this.length;
// begin 值为负数
var start = begin || 0;
start = (start >= 0) ? start : Math.max(0, len + start); // start的负值不能大于len值
// end 为负数
var upTo = (typeof end === 'number') ? Math.min(end, len) : len;
if (end < 0) {
upTo = len + end;
}
// slice 获取实际的个数
size = upTo - start;
if (size > 0) {
cloned = new Array(size);
if (this.charAt) {
for (i = 0; i < size; i++) {
cloned[i] = this.charAt(start + i);
}
} else {
for (i = 0; i < size; i++) {
cloned[i] = this[start + i];
}
}
}
return cloned;
}
}
}());
concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
var alpha = ['a', 'b', 'c'];
var numeric = [1, 2, 3];
alpha.concat(numeric); // ["a", "b", "c", 1, 2, 3]
var num1 = [1, 2, 3],
num2 = [4, 5, 6],
num3 = [7, 8, 9];
var nums = num1.concat(num2, num3); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
var alpha = ['a', 'b', 'c'];
var alphaNumeric = alpha.concat(1, [2, 3]); // ['a', 'b', 'c', 1, 2, 3]
reverse() 方法将数组中元素的位置颠倒。
var myArray = ['one', 'two', 'three'];
myArray.reverse(); // ['three', 'two', 'one'];
但是当数组索引不是连续或以0开始,那就要注意了
var a = new Array();
a[2] = 2;
a[4] = 4;
a[6] = 6;
console.log(a);
// 2:2
// 4:4
// 6:6
a.reverse();
console.log(a);
// 0:6
// 2:4
// 4:2