什么是数组?
数组就是一个又一个元素组成的有序集合,数组取值用的是下标
数组有两种声明方式:
1.字面量声明
2.构造函数声明
// var arr = [1,{},'']
// var arr1 = new Array()
数组.length
var arr = [1,2,3,4,5,6]
for(var i=0;i<=arr.length-1;i++){
console.log(arr[i],i)
}
1.push() 可以添加一个或多个参数到数组的尾部,添加之后原来的数组会发生改变,返回的是添加后的数组的长度
const array = [1, 2, 3]
console.log(array); //初始数组
const newArray = array.push(4, 5, 6, 7)
console.log(array); //添加过后的数组
2.unshift 往数组的头部添加数据 unshift的返回值也是新数组的长度
var arr = ['a', 'b', 'c', 'd']
arr.unshift('e')
console.log(arr) // ['e', 'a', 'b', 'c', 'd']打印的结果
3.pop 从数组的尾部删除一个数据 pop的返回值时删除的数据
var arr = ['a', 'b', 'c', 'd']
arr.pop()
console.log(arr); ['a', 'b', 'c']//返回值
4.shift从数组的头部删除一个数据 返回值也是删除的数据
var arr = ['a', 'b', 'c', 'd']
arr.shift()
console.log(arr) // ['b', 'c', 'd']
//总结 数组头部尾部添加数据的方法返回值都是新数组的长度
// 头部尾部删除数据的方法返回值都是删除的数据
//push unshift pop shift都会改变元素组
5.splice方法 操作数组中的数据 splice的返回值是包含了所有删除的数据的数组
var arr = ['a', 'b', 'c', 'd', 'e']
arr.splice(0, 2, 'f') // 这句代码的意思是在数组中从0的位置删除两个 第三个参数时要添加的数据
console.log(arr)// 删除后剩下的数组数据
6.isArray() 这个方法用来判断一个对象是不是数组,是的话返回true,否则返回false
const array = [1, 2, 3, 4, 6]
console.log(Array.isArray(array));
7.map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
const array = [1, 2, 3, 4]
console.log(array);
const newArray = array.map(x => {
return x + 1
})
console.log(newArray);
8.sort -- 排序 返回排序后的数组
var a = arr.sort((a,b)=>b-a)
arr.sort((a,b)=>{
return b - a
})
var arr1 = [{age:10},{age: 8},{age:20}]
console.log(arr)
console.log(a)
arr1.sort((a,b)=>{
return b.age-a.age
})
console.log(arr1)
9.reverse -- 数组反转(就是倒着)
var arr=[1,2,3,4,5]
var a = arr.reverse()
console.log(a)
10.循环遍历数组 forEach -- 对数组进行循环遍历
var arr = [1,2,3,4]
var a = arr.forEach((item,index)=>{
console.log(item,index)
})
11.filter -- 数组过滤 返回 所有符合条件的元素 一个新数组
var arr = [1,2,3,4,5,6,1]
var a = arr.filter(item=>item>4)
console.log(arr)
console.log(a)
12.map -- 对数组的每一项进行操作,返回新数组
var arr = [1,2,3,4,5,6,1]
var a = arr.map(item=>item*3)
console.log(a)
**注'=>'这东西就是箭头函数不是啥大不了的东西
因为后边参数就一个所以可以省略大括号想写的话就:
var a = arr.map(item=>{
return item*3
})
13.some -- 判断数组中是否有满足条件的元素 如果有返回true 没有 false(那怕只满足一个条件也会返回)
var arr = [1,2,3,4,5,6,1]
var a = arr.some(item=>item>30) //里边没有比30大的所以一定返回false
console.log(a)
14.every -- 判断数组中是否元素是否全部满足条件 如果是返回true 否则 false
var arr = [1,2,3,4,5,6,1]
var a = arr.every(item=>item>0) //都大于0所以一定是true
console.log(a)
15.indexOf -- 查找第一个符合条件的下标,查到不到返回-1
var arr = [1,2,3,4,5,6,1]
let a = arr.indexOf(1) //注:看好了返回的是下标!下标!
console.log(a)
16.lastIndexOf -- 查找最后一个符合条件的下标,查到不到返回-1
var arr=[1,2,3,4,5,6,1]
let a = arr.lastIndexOf(1)
console.log(a)
17.findIndex -- 查找第一个符合条件的下标,查到不到返回-1
var arr = [1,2,3,4,5,6,1]
var a = arr.findIndex(item=>item==3)
console.log(a)
18.find -- 查找第一个符合条件的元素,查到不到返回undefined
var arr = [1,2,3,4,5,6,1]
var a = arr.find(item=>item==5) //返回的是找到的元素
console.log(a)
19.includes -- 是否包含某个元素 如果包含 true;否则 false
var arr = [1,2,3,4,5,6,1]
var a = arr.includes(6)
console.log(a)
* 七个内置的操作方法: 改变数组本身
* push -- 尾部添加 返回新数组的长度
* pop -- 尾部删除 返回的是被删除的元素
* shift -- 头部删除
* unshift
* sort -- 排序 返回排序后的数组
* reverse -- 数组反转
* splice -- 增加 删除 修改;本质上是删除
* 数组.splice(从哪里开始的下标,删除的长度,要替换的值)
这七个是可以改变数组本身的,其他的是返回新数组不对原数组改变
另外还可以把数组转换成字符串
数组中 toString() 方法能够把每个元素转换为字符串,然后以逗号连接输出显示。
var a = [1,2,3,4,5,6,7,8,9,0]; //定义数组
var s = a.toString(); //把数组转换为字符串
console.log(s); //返回字符串“1,2,3,4,5,6,7,8,9,0”
console.log(typeof s); //返回字符串string,说明是字符串类型
toLocalString() 方法与 toString() 方法用法基本相同,主要区别在于 toLocalString() 方法能够使用用户所在地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
var a = [1,2,3,4,5]; //定义数组
var s = a.toLocalString(); //把数组转换为本地字符串
console.log(s); //返回字符串“1,2,3,4,5,6,7,8,9,0”
join() 方法可以把数组转换为字符串,不过它可以指定分隔符。在调用 join() 方法时,可以传递一个参数作为分隔符来连接每个元素。如果省略参数,默认使用逗号作为分隔符,这时与 toString() 方法转换操作效果相同。
var a = [1,2,3,4,5]; //定义数组
var s = a.join("=="); //指定分隔符
console.log(s); //返回字符串“1==2==3==4==5”
split() 方法是 String 对象方法,与 join() 方法操作正好相反。该方法可以指定两个参数,第 1 个参数为分隔符,指定从哪儿进行分隔的标记;第 2 个参数指定要返回数组的长度。
var s = "1==2== 3==4 ==5";
var a = s.split("==");
console.log(a);
console.log(a.constructor == Array);
能转字符串当然也能转回来下面介绍几个字符串转数组的方法
常见的转换技术是split字符串方法,但这也是有问题的一种。
通过使用空字符串作为split方法的分隔符,我们可以将字符串转换为字符数组。
const text = "abc";
const chars = text.split('');
console.log(chars);
//['a', 'b', 'c']
该split方法无法正确处理采用两个代码单元(如表情符号)的字符。下面是一个例子。
const text = "abc????";
const chars = text.split('');
console.log(chars);
//["a", "b", "c", "\ud83d", "\ude0e"]
展开运算符 ( ...) 允许在需要多个元素(如数组文字)的地方扩展诸如字符串之类的可迭代对象。
这是将字符串扩展为字符数组的示例。正确处理采用两个代码单元的字符。
const text = "abc????";
const chars = [ ...text ];
console.log(chars);
//["a", "b", "c", "????"]
解构赋值语法可以将数组或可迭代对象中的值解包为不同的变量。
在解构数组或可迭代对象时,我们可以使用 rest 模式将其剩余部分提取到单个变量中。
const text = "abc????";
const [ ...chars ] = text;
console.log(chars);
//["a", "b", "c", "????"]
Array.from辅助创建从阵列状或迭代的对象的新数组。字符串既可迭代又类似于数组,因此,可以成功地将其转换为字符数组。
const text = "abc????";
const chars = Array.from(text);
console.log(chars);
//["a", "b", "c", "????"]