数组
数组的特点
默认值是 undefined,当访问数组中不存在的索引时,会返回 undefined,而不是报错数组的大小不固定,会自动的进行扩容可以存储不同类型的数据分配给数组的存储空间是不连续的,哈希映射或链表传送门数组也是一个特殊的对象,对象有的方法数组也具有
数组的创建
字面量
var arr
= [1, 2, 3, 4];
构造器构造
var arr1
= new Array(1, 2, 3, 4);
var arr2
= new Array(10);
var arr3
= Array(1, 2, 3, 4);
Array.of
var arr5
= Array
.of(1, 2, 3, 4);
var arr5
= Array
.of(4);
Array.form(arr, mapFn, this)
可以将类数组装换为真正的数组
var obj1
= {
0: "a",
1: "b",
2: "c",
length
: 3
};
var arr1
= Array
.from(obj1
);
var arr2
= Array
.from(obj1
, x
=> x
+ x
);
注意
构造器构造的数组,如果构造函数的参数传递的是一个数字,那么这个数字代表的是数组的长度,数组当中的每一项默认为 emptyArray.of 是返回所有参数值组成的数组,如果没有参数就返回一个空数组。解决构造器构造中因参数不同,导致的行为有差异的问题
如何判断数组
Array.isArray():用来判断某个变量是否是一个数组对象,若是返回 true,否则返回 false
数组的常见方法
为数组添加元素
push():向数组的末尾添加一个或多个元素,并返回该数组的新长度unshift():向数组的开头添加一个或多个元素,并返回该数组的新长度splice(index, 0, el1, eln):向数组指定位置添加元素直接赋值:arr[arr.length] = data
从数组中删除指定的元素
pop():删除数组的最后一个元素,并返回这个被删除的元素shift():删除数组的第一个元素,并返回这个被删除的元素splice(index, n):n 为删除数组的个数,若不写,则默认删除到末尾,并返回被删除的元素修改数组的长度:arr.length = n
修改数组的方法
splice(index, n, el1, eln):从index开始,修改n个,并分别修改为 el直接赋值:arr[index] = data
遍历数组的方法
es5
forEach:为数组中的每个元素执行一次回调函数,返回值为 undefinedmap:返回一个新数组,新数组是该数组中每个元素调用一次提供的函数后的返回值filter:将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回every:如果数组中的每个元素都满足测试函数,则返回 true,否则返回 falsesome:如果数组中至少一个元素满足测试函数,则返回 true,否则返回 falsereduce:从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。如果没有初始值得话,会将数组的第一个参数作为初始值reduceRight(callBackFn(accumclator, currentValue, index, arr), initialValue):从右向左
var arr
= [1, 2, 5];
var arr1
= arr
.splice(2, 0, 3, 4);
console
.log(arr
);
var arr2
= arr
.splice(2, 2, 'c', 'd');
console
.log(arr
);
var arr1
= [[0, 1], [2, 3], [3, 4]];
var arr2
= arr1
.reduce((a
, b
) => {
return [...a
, ...b
];
}, []);
console
.log(arr2
);
var sum
= arr2
.reduce((acc
, current
) => {
return acc
+ current
;
}, 0);
console
.log(sum
);
es6
find:找到你第一个满足测试函数的元素并返回那个元素的值,若找不到,则返回 undefinedfindIndex:找到第一个满足测试函数并返回那个元素的索引,若找不到,则返回 -1keys:返回一个数组迭代器对象,该迭代器会包含所有数组元素的键values:值entries:键和值
数组其它方法
数组中查找数据的方法
indexOf:返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1lastIndexOf:从右向左
合并数组
concat拓展运算符 …
将数组拼接为字符串
join([separator]):使用指定分割符将数组拼接为字符串,默认分隔符是逗号toString():返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的 Object.prototype.toString()方法toLocalString
数组排序
sort(compFn(a, b)):如果 compFn(a, b) < 0,那么 a 会排列在 b 之前;如果 compFn(a, b) = = 0,那么 不变;如果 compFn(a, b) > 0,那么 b 会排列在 a 之前
默认比较的是每个字符的 Unicode
var arr
= [2, 1, 11, 4, 52, 17];
arr
.sort((a
, b
) => a
- b
);
console
.log(arr
);
数组翻转
reverse
判断数组中是否包含某个数据
includes:判断当前数组是否包含某指定的值,如果是返回 true,否则返回 false。findindexOf
截取数组中部分连续数据
slice(begin, end):返回一个新的数组,浅拷贝
填充数组
fill
复制数组中某些连续的数据到指定位置
copyWidth
改变原数组的方法有
pushpopshiftunshiftsplicesortreversefillcopeWidth
不改变原数组的方法有
slicejoinconcatindexOflastIndexOfincludestoStringtoLocalString