数组方法
一、数组方法(添加,删除)
1.push()
- 在数组的末尾追加一个元素,返回一个新数组的长度,会改变原数组
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.push(111));
console.log(arr);
2.pop()
- 删除数组末尾的元素,返回被删除的元素,会改变原数组
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.pop());
console.log(arr);
3.unshift()
- 添加元素到数组的最前面,返回新数组的长度,会改变原数组
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.unshift(-1,0));
console.log(arr)
4.shift()
- 删除数组中最前面的元素,返回被删除的元素,改变原数组
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.shift());
console.log(arr);
二、数组方法(插入,连接,反转,排序,剪切,拼接)
1.splice()
- 从指定的位置删除元素并插入元素,截取数组中的某些内容,按照数组的索引来截取,改变原数组
var arr = [1,2, 3, 4, 5, 6, 7, 8, 9];
console.log(arr.splice(1,2,[33,44,55]))
console.log(arr)
2.concat()
- 连接两个数组或元素,返回连接后的新数组,不改变原数组
var arr = [1,2, 3, 4, 5, 6, 7, 8, 9];
var arr1 = 111;
console.log(arr.concat(arr1));
console.log(arr)
var arr2 = [333,444,555];
console.log(arr.concat(arr2));
console.log(arr)
3.reverse()
- 将数组反转,返回反转后的值,数组中第一个变成最后一个,最后一个变成第一个
var arr = [1,2, 3, 4, 5, 6, 7, 8, 9];
console.log(arr.reverse());
console.log(arr);
4.sort()
- 数组排序,默认转字符串再排序,默认排序顺序是根据字符串Unicode码点
var arr = [1,6,8,7,2,3,4,5,'111'];
console.log(arr.sort());
console.log(arr)
var arr1 = ['Alice','Lucy','Bob','Jhon','Lin','FTX'];
console.log(arr1.sort());
console.log(arr1)
5.slice()
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.slice(3,6));
console.log(arr)
6.join()
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.join('_'))
console.log(arr)
三、数组方法(查找,检索,转换)
1.indexOf()
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.indexOf(5,2));
console.log(arr)
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.indexOf(222));
console.log(arr)
2.lastIndexOf()
- 与indexOf()的功能是一样的,只不过indexOf是从左往右查找,而lastIndexOf()是从右往左查找
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9,2];
console.log(arr.lastIndexOf(2));
console.log(arr)
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9,2];
console.log(arr.lastIndexOf(222));
console.log(arr)
3.toString()
var arr = [1,2,'a','b',3,4,'c','d']
console.log(arr.toString())
4.toLocaleString()
- 可根据本地时间把 Date 对象转换为字符串,并返回结果
var timer = new Date();
console.log(timer.toLocaleString())
四、数组方法(迭代方法)ES5
1.every()
- 测试一个数组内的所有元素是否都能通过某个指定函数的测试,它返回一个布尔值
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newArr = arr.every(function(value,index){
if (value>1) {
return true
}
})
console.log(newArr)
console.log(arr)
2.some()
- 和every()使用是一样的,测试一个数组内至少有一个元素是否能通过某个指定函数的测试,它返回一个布尔值
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newArr = arr.some(function(value,index){
if (value>7) {
return true
}
})
console.log(newArr)
console.log(arr)
3.forEach()
var arr = [1,2,3,4];
arr.forEach(function(item, index, arr){
console.log('数组的第 ' + index + ' 项的值是 ' + item + ',原始数组是', arr);
})
4.map()
- 和forEach()类似,只不过可以对数组中的每一项进行操作,返回一个新的数组
var arr = [1,2,3,4,5,6,7,8,9];
var newArr = arr.map(function (item,index,arr){
return item*2
})
console.log(newArr);
console.log(arr)
5.filter()
- 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
var arr = [1,2,3,4,5,6,7,8,9];
var newArr = arr.filter(function(value){
if (value > 3) {
return true
}
})
console.log(newArr)
console.log(arr)
六、数组方法(归并操作)
1.reduce()
- 对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
var arr = [1,2,3,4,5]
var sum = arr.reduce(function(accumulator,currentValue){
console.log("本次遍历到的数组元素的值是:"+currentValue)
console.log("上一次调用回调时返回的值:"+accumulator)
return accumulator+currentValue;
});
console.log(sum)
2.reduceRight()
- 和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。
var arr = [5,8,10,16];
function getSum(total, num) {
return total + num;
}
function myFunction(item) {
console.log(arr.reduceRight(getSum));
}
myFunction()
七、ES6新增新操作数组的方法
1.find()
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newArr = arr.find(function(value,index,arr){
if(value>5){
return true
}
})
console.log(newArr)
console.log(arr)
2.findIndex()
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newArr = arr.findIndex(function(value,index,arr){
if(value>5){
return true
}
})
console.log(newArr)
console.log(arr)
3.fill()
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(arr.fill(1));
console.log(arr.fill('a',5,8));
4.Array.from()
var str = 'Hello world'
console.log(Array.from(str));
console.log(str)
5.Array.of()
- 将一组值转化成数组,和声明数组类似,可替代Array() 或 new Array()
console.log(Array.of(1,2,3,4,5,6,'A','B'));
console.log(Array.of(1))
6.copyWithin()
- 复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(arr.copyWithin(0,4,6));
console.log(arr)
7.includes()
var arr = [1,2,3,4,5,6,7,8,9];
console.log(arr.includes(5));
console.log(arr.includes(100));
console.log(arr)
8.entries()
- 返回一个新的Array Iterator对象,这个对象包含数组中每个索引的键与值
var arr = ['a','b','c','d']
var arr2 = arr.entries();
console.log(arr.entries())
console.log(arr.entries().next().value)
for(var i of arr2){
console.log(i)
}
9.keys()
var arr = [1,5,3,8,2,18,2154];
var newArr = arr.keys();
console.log(newArr);
for(var key of newArr){
console.log(key);
}
10.values()
- 返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值
var arr = ['a','p','p','l','e'];
var newArr = arr.values();
console.log(newArr)
for(var arr1 of newArr){
console.log(arr1);
}
八、ES10新增新操作数组的方法
1.flat()
- 简单来说,就是将多维数组降维,flat()会默认拉平一层,
var arr1 = [1,2,3,[7,8,9,[10,11]]]
console.log(arr1.flat());
console.log(arr1.flat(2))
var arr2 = [1,2,3,[25,26,[77,23,[55,6681,[11223,1234,[7862]]]]]]
console.log(arr2.flat(Infinity))
2.flatMap()
- 原数组的每个成员执行一个函数,相当于执行map(),然后对返回值组成的数组执行flat()方法,返回一个新数组,不改变原数组
var arr = [1,2,3,4];
console.log(arr.flatMap(x => [x,[2*x]]));