数组有哪些方法,是否改变原数组
concat
返回合并后的数组,不会改变原数组
//将两个数组合并成一个数组
let a = [1,2,3]
let b = [4,5,6]
let c= a.concat(b) //[1,2,3,4,5,6]
//和push区别
let d = a.push(b) // [1,2,3,[4,5,6]]
join
返回字符串,不会改变原数组
//join() 方法用于把数组中的所有元素放入一个字符串。
let a = [1,2,3]
let b = a.jion('-')// '1-2-3'
let c = a.join() // '123'
reverse
会改变原数组
//将数组里面元素翻转
let a = [1,2,3]
a.reverse() // [3,2,1]
push
将一个元素从数组的最后面添加,会改变原数组
let a = [1,2,3]
let b = [4,5,6]
a.push(b) // [1,2,3,[4,5,6]]
a.push(7) // [1,2,3,[4,5,6],7]
pop
将数组头部删除一个元素,返回被删除的元素会改变原数组
let a = [1,2,3]
let b = [4,5,6]
a.pop() // [2,3]
unshift
将数组头部增加一个元素,会改变原数组
let a = [1,2,3]
let b = [4,5,6]
a.unshift(b) // [[4,5,6],1,2,3]
a.push(7) // [7,[4,5,6],1,2,3]
shift
将数组尾部删除一个元素,返回被删除的元素会改变原数组
let a = [1,2,3]
a.shift() // [1,2]
slice
截取,返回被截取的对象以数组的形式,不会改变原数组
arrayObject(start,end)
3、使用说明
参数一:开始截取的下标位置
参数二:结束截取下标位置,但是不会截取到该位置上的值
slice()方法是可以操作字符串,也可以操作数组,splice是不可以操作字符串,只能操作数组。
4、返回值
是一个新的数组,原数组没有改变,start就是从哪开始截取,返回的是把原数组截取之后的数组。
splice
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,0,"Lemon","Kiwi");
fruits 输出结果:
Banana,Orange,Lemon,Kiwi,Apple,Mango
sort
排序方法,会改变原数组
let a = [9,5,6,2,1,4]
a.sort() // [1,2,4,5,6,9]
isArray
判断一个值是不是数组,不会改变原数组
也有其他方法typeof()/instanceof()等
let a = [9,5,6,2,1,4]
let b = '456'
a.isArray()//true
b.isArray()//false
inCludes
检测数组 site 是否包含 一个指定元素,不会改变原数组
let site = ['runoob', 'google', 'taobao'];
site.includes('runoob');
// true
site.includes('baidu');
// false
toString()
toString()方法用于将数组转换为字符串。 使用数组名称调用它,并返回包含以逗号分隔的数组元素的字符串。()
数组循环方法:
for
for 循环在JavaScript 刚萌生的时候就出现了,for循环是使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。for循环没有返回值,会改变原数组
for (var i = 0; i < arr.length; i++) {
console.log(arr[i])
}
forEach
遍历数组中的每一项,没有返回值,对原数组没有影响,但不支持IE,通过下标也会改变原数组
arr.forEach((value, index, array) => {
// 参数一是: 数组元素
// 参数二是: 数组元素的索引
// 参数三是:当前的数组
})
forOf
for-of 循环是ES6新增特性,for-of 的功能不仅仅用于遍历数组,它还可以 遍历字符串、遍历类数组对象、支持 Map 和 Set 对象遍历
let arr = [1, 2, 3, 4];
for (let item in arr) {
console.log(item) // 遍历每个元素 1 2 3 4
}
map
map() 的回调函数中支持 return 返回值,相当于把数组中的每一项改变,但并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了
let arr = [12,23,24,42,1];
let res = arr.map((item, index, ary) => {
return item*10;
})
console.log(res); // [120,230,240,420,10]; 原数组拷贝了一份,并进行了修改
console.log(ary); // [12,23,24,42,1]; 原数组并未发生变化
filter
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组。
注意:它不会改变原始数组,但是直接返回一个新数组。
let arr = [12, 66, 4, 88, 3, 7];
let res = arr.filter((value, index, array) => {
// 参数一是:数组元素
// 参数二是:数组元素的索引
// 参数三是:当前的数组
return value >= 20;
});
console.log(res); // [66,88] 返回值是一个新数组
some
some() 是查找数组中是否有满足条件的元素,返回值是布尔值,如果查找到这个元素,就返回 true(有任意一项符合条件即返回true) , 如果查找不到就返回 false。
如果查询数组中唯一的元素,用 some 方法更合适,在 some 里面遇到 return true 就是终止遍历,迭代效率更高。
let arr = [10, 30, 4];
let flag = arr.some((value, index, array) => {
return value < 3;
});
console.log(flag); // false 返回值是布尔值,只要查找到满足条件的一个元素就立马终止循环
every
every() 是对数组中的每一项运行给定函数,只有当该函数对每一项返回true,才返回true,否则返回false。
let arr = [1, 2, 3, 4, 5, 6];
let flag = arr.every((value, index, array) => {
return value > 3;
});
console.log(flag); // false
find
find() 方法返回数组中符合测试函数条件的第一个元素。否则返回undefined
let ary = [{
id: 1,
name:'张三'
}, {
id: 2,
name:'李四'
}];
let res = ary.find((item, index) => item.id === 2);
console.log(res) // {id:2,name:'李四'}
// 找数组里面符合条件的值,当数组中元素id等于2的查找出来,注意,只会匹配第一个
findindex
findIndex() 用于找出第一个符合条件的数组成员的位置,如果没有找到返回 -1。
let ary = [1, 5, 10, 15];
let resIndex = ary.findIndex((value, index) => value > 9);
console.log(resIndex); // 2
// 找数组里面符合条件的值的位置(索引),注意,只会匹配第一个