数组
- 创建数组的方法
- 1:字面量表示法 : var arr = [];
- 2: 实例化数组: var arr = new Array();
- 当 new Array() 的参数只有一个,并且这个参数是一个数字的时候,那么代表创建一个长度为这个数字的空数组
1: var arr = []; // []
2: var arr = new Array(1,2,3); // (3) [1, 2, 3]
3: var arr = new Array(6); // [empty × 6]
判断是否是数组
- Array.isArray(数据) ; 可以判断这个数据是不是数组,如果是那么就返回true,否则就是false
1: console.log(typeof []); // 'object'
2: console.log(typeof {}); // 'object'
3: function test(){
var arr = [];
var obj = {};
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(arguments)); // true
console.log(Array.isArray(obj)); // false
}
test();
数组的方法
标签(空格分隔): array()
concat();
- cancat(); 方法用于连接两个数组或多个数组,该方法不会改变现有的数组,而仅仅会返回连接数组的一个副本。
例1: 把两个数组连接起来;
var arr1 = [1,2,3,4];
var arr2 = [4,5,6,7,8];
arr1.concat(arr2);
(9) [1, 2, 3, 4, 4, 5, 6, 7, 8]
arr1;
(4) [1, 2, 3, 4]
arr2;
(5) [4, 5, 6, 7, 8]
//--------------------------------------------
例2: 把concat的参数连接到数组arr1中
var arr1 = [1,2,3,4];
undefined
arr1.concat(8,9); //[1, 2, 3, 4, 8, 9];
//--------------------------------------------
例 3: 连接多个数组;
var a = [1,2];
undefined
var b = [3,4];
undefined
var c = [5,6];
undefined
a.concat(b,c); // [1, 2, 3, 4, 5, 6];
join(); 方法; 将数组转换成字符串 原数组不会改变
- join()方法用于把数组中所有的元素放入到一个字符串中,元素通过指定的分隔符进行分割;
- 语法:arrayObject.join(separator(参数的意思)); separator(可选);指定要使用的分隔符,如果省略该参数则使用逗号作为分隔符;
- 返回值:返回一个字符串。该字符串是通过把arrayObject的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。
例1:创建一个数组,然后把它的所有元素放入一个字符串
var arrt = ['hello','boy','every'];
arrt.join(); // "hello,boy,every" 默认使用逗号分隔开
例如2:创建一个数组,使用分隔符来来分割数组中的元素;
var arr1 = [1,2,3,4];
var str = arr1.join(':'); // "1:2:3:4"
例3:arr1.join('');
var arr1 = [1,2,3,4];
arr1.join(''); // // "1234"
//额外内容
var arr1 = [1,2,3,4];
arr1.toString(); // "1,2,3,4";
- pop()方法用于删除并返回数组的最后一个元素;
- 语法:arrayObject.pop();
- 返回值:arrayObject 的最后一个元素(也就是删除的那个元素);
- pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
var arr1 = [1,2,3,4];
arr1.pop(); // 4
console.log(arr1) //(3) [1, 2, 3];
var attr = ['hello','boy'];
attr.pop(); // "boy"
attr; //["hello"]
例2:如果数组为空; pop() 不改变数组,并返回 undefined 值
var attr2 = [];
attr2.pop(); // undefined
push 向数组末尾添加一个或者多个元素 返回值是数组新的length长度;
- push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度;
- 语法 : arrayObject.push(newelement1,newelement2,….,newelementX);
- 返回值: 把指定的值添加到数组后的新长度。
- 说明: push() 方法可把它的参数顺序添加到arrayObject的尾部。它直接修改arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。
- 提示:要想数组的开头添加一个或多个元素,请使用 unshift() 方法。
例1:arr3.push(1);
var arr3 = [1,2,3,4];
arr3.push(1);// (5) [1, 2, 3, 4, 1];
例2 push 一个数组;
var arr1 = [1,2,3,4];
var attr = ['hello','boy'];
arr1.push(attr); // (5) [1, 2, 3, 4, Array(2)] // [1, 2, 3, 4, ['hello','boy']];
arr1[4][1]; // "boy";
例3: push 一个对象;
var obj = {a:1};
arr1.push(obj); // length 6 ;
arr1[5].a; // 1;
arr1[5].a = 2; // (6) [1, 2, 3, 4, Array(2), {a:2}]
reverse // 翻译 ; 反转;颠倒
reverse()方法;
- 语法:arrayObject.reverse();
- 该方法会改变原来的数组,而不会创建新的数组;
eg: var arr3 = [1,2,3,4];
arr3.reverse(); //[4, 3, 2, 1]
arr3 = [4, 3, 2, 1];
shift();—————-》shift 翻译 删除 去掉的意思
- shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值;
- 语法:arrayObject.shift();
- 返回值:是原来数组的第一个元素的值;
- 说明:如果数组是空的那么shift()方法将不进行任何操作;返回undefined ;
该方法不创建新数组,而是直接修改原来的数组;
var arr = ['hello','a','b',1];
arr.shift(); // 'hello';
console.log(arr); // ["a", "b", 1]
unshift();
- unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度。
var arr = [];
arr.unshift(1, 2, 3);
console.log(arr); // [1, 2, 3]
slice 翻译:切成片; 切下; 划分;
slice(start,end)方法; // 浅拷贝
- slice() 方法可从已有的数组中返回选定的元素。
- 语法:arrayObject.slice(start,end); 包含开始位置但是不包含结束位置
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array
start 必需
*规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。*
end
可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
返回值
返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
提示:如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。
请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。
splice() 向数组中添加或者删除项目
- splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
- 注释:该方法会改变原始数组
- 语法:arrayObject.splice(index,deleteCount,item1,…..,itemX);
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。deleteCount 必需。要删除的项目数量。如果设置为 0,则不会删除项目。deleteCount: 整数,表示要移除的数组元素的个数。如果 deleteCount 是 0,则不移除元素。这种情况下,至少应添加一个新元素。如果 deleteCount 大于start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。item1, ..., itemX 可选。向数组添加的新项目。
- item1, item2, … 要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。
- 返回值:包含被删除项目的新数组,如果有的话
- 说明:splice() 方法可删除从index处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。如果从arrayObject中删除了元素,则返回的是含有被删除的元素的数组;
例1:创建一个新数组,并向其添加一个元素;
var arr1 = ['whats','name'];
arr1.splice(1,0,'your');
arr1 // (3) ["whats", "your", "name"];
var arr = ['a', 'b', 'c'];
console.log(arr.splice(1, 1)); // ['b'] 从第一个开始移除 ,移除一个返回值就是移除的这个数组
var arr = ['a', 'b', 'c'];
console.log(arr.splice(1, 1)); // ['b']
console.log(arr); // ["a",'c']
console.log(arr.splice(1, 1, 1, 2));
console.log(arr); // ['a',1,2]
console.log(arr.splice(2)); // [2] 如果只有一个值得:表示的是从第几个开始删除;包含
console.log(arr); // ["a", 1]
sort();
- sort()用于对数组的元素进行排序;
- 语法:arrayObject.sort(sortby);
- 参数:sortby 规定排序的顺序,必须是函数;
- 返回值:对数组的引用 (是在原数组上进行排序,不生成副本);
// 从小到大排序
function fn1(){
return a-b;
};
var arr = [1,6,5,4];
arr.sort(fn1); // arr = [1,4,5,6];
// 从大到小排序
function fn1(){
return b-a;
};
var arr = [1,6,5,4];
arr.sort(fn1); // arr = [6,5,4,1];
indexOf 方法;
与 String 类似 , Array 也可以通过 indexOf()来搜索一个指定元素的位置;
- 如果找到则返回找到的索引,没有找到则返回 -1;
var arr = [10,20,'30',''];
arr.indexOf(10); // 返回的索引值值为0;
arr.indexOf(30); // 没有找到30,返回 -1;
数组的方法操作;
##### 克隆数组clone
var ary = [1,2,3];
var ary1 = ary.concat(); // 第一种方法
var ary2 = ary.slice(0); // 第二种方法
var ary3 = ary; // 这个不是复制,这个是引用
查找一个字符串中出现次数最多的字符,统计这个次数
将类数组转换成 数组
- Array.from(类数组)
<div></div>
<div></div>
<div></div>
<div></div>
<script>
var divs = document.querySelectorAll('div');
console.log(divs) // NodeList(4) [div, div, div, div] 类数组
console.log(Array.isArray(divs)); // false
divs = Array.from(divs);
console.log(divs); // [div, div, div, div]
console.log(Array.isArray(divs)); // true
divs.length--;
console.log(divs);
</script>
数组遍历
forEach(); 返回值 - undefined
- arr.forEach(cb,[thisArg])
- callback 为数组中的每一个元素执行的(函数),该函数接受三个参数:
- thisArg: 可选参数。当执行回调 函数时用作this的值(参考对象)。
- 返回值: undefined
参数1:currentValue(当前值) 数组中正在处理的当前元素。
参数2:index(索引) 数组中正在处理的当前元素的索引。
参数3:array forEach()方法正在操作的数组。
举个栗子
arr.forEach(function (item, index, self){
console.log(item, index); // item 就是数组中的每一项, index 就是数组中每一项的索引值
console.log(self); // 就是当前的数组
console.log(this); // thisArg 传入的是谁就指向谁 - document
}, document);
map 的返回值是一个新数组
- arr.forEach(cb,[thisArg])
- callback 为数组中的每一个元素执行的(函数),该函数接受三个参数:
- thisArg: 可选参数。当执行回调 函数时用作this的值(参考对象)。
- 返回值: 新数组