1.forEach:forEach
的使用频率很高,多用于对数组自身的改变和各元素相关统计性的计算,重要特性如下:
1.1 forEach会改变原数组,没有返回值,
1.2 循环遍历过程中不能跳出循环,可以使用try/catch来抛出错误,但不推荐
1.3 对于引用类型的值,会改变原数组,对于值类型,则不会改变原数组
1.4 forEach方法不支持链式操作
var arr1 = [
{name:'鸣人',age:16},
{name:'佐助',age:17}
];
var arr2 = [1,2,3];
arr1.forEach(item => {
item.age = item.age + 1}
);
//=> [{name:'鸣人',age:17},{name:'佐助',age:18}]
arr2.forEach(item => {
item = item * 2}
)
// => [1,2,3]
2.map:map即为映射,将原数组根据执行的函数结果映射为新的数组,不会改变原数组
2.1 不会改变原数组,会新创建一个新的数组,但可以通过将原数组覆盖的方式来改变原数组,返回值为新数组
2.2 新数组的值为每次遍历原数组并执行函数返回的结果,所以map执行的函数中必须要有return
let arr = [1,2,3];
arr = arr.map(item => { return item * 2 })
3.filter:不会改变原数组,有返回值,返回一个新数组,该新数组的值为通过过滤函数并成功return值
3.1:filter过滤函数中也必须要有return,否则返回的新数组为空
let newArr = [1,2,3,4,5].filter(item =>{
if(item > 3) return item
})
// => [4,5]
4.sort:排序函数,可以根据字母或数组进行升序活着降序排序
4.1:sort没有返回值,改变原数组
4.2:排序规则:返回值的大小决定 小于0->升序 等于0->不排序 大于0->降序
4.3:sort()方法是使用的冒泡和插入两种方式结合进行排序的。
4.4:使用冒泡和排序模拟sort()排序
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var arr=[32,12,4,20,1,54,56,6,14];
function findMinIndex(arr,start){
var iMin=arr[start];
var iMinIndex=start;
for(var i=start;i<arr.length;i++){
if(iMin>arr[i]){
iMin=arr[i];
iMinIndex=i;
}
}
return iMinIndex;
}
for(var i=0;i<arr.length;i++){
var n=findMinIndex(arr,i);
var tem;
tem=arr[n];
arr[n]=arr[i];
arr[i]=tem;
}
alert(arr);
</script>
</head>
<body>
</body>
</html>
5.some:循环遍历数组,检查数组中那些元素满足条件
5.1:返回值为布尔值并且只要数组中有一个满足条件就返回true
var result = [
{name:'鸣人',age:16},
{name:'佐助',age:17}
].some(item => {
return item.age > 16
});
=> true
6:every如果是some是或的关系,那么every则是与的关系,返回值为布尔值
6.1 当数组中所以元素都满足条件,才返回true,否则返回false
var result = [
{name:'鸣人',age:16},
{name:'佐助',age:17}
].every(item => {
return item.age > 16
});
=> false
7.set去重
let tempArr = new Set([1,2,3,3,4,4,5])
// => {1,2,3,4,5}
//并且已有元素是添加不进去的:
tempArr.add(3)
// => {1,2,3,4,5}
tempArr.add(6)
// => {1,2,3,4,5,6}
7.1 set只能用于值类型的去重,如果需要去重的元素为应用类型,则无法去重
let mySet = new Set();
mySet.add(1); // Set(1) {1}
mySet.add(5); // Set(2) {1, 5}
mySet.add(5); // Set(2) {1, 5} 这里体现了值的唯一性
mySet.add('some text');
[...mySet]
// => [1,5,'some text']
mySet.add({name:'jay Chou',age:40});
mySet.add({name:'jay Chou',age:40});
[...mySet]
// => [1,5,'some text',{name:'jay Chou',age:40},{name:'jay Chou',age:40}]
7.2 可以通过loadsh中的_.uniqWith()方法来对应用类型的数据进行去重,其中, _.isEqual(value,other)用于执行深比较来确定两者的值是否相等。 _.uniqWith()做去重处理。
import _ from 'lodash';
<script>
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
_.uniqWith(objects, _.isEqual);
</script>
//=> [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
8.findIndex:在数组中查找并返回某个值的索引(只对值类型有效)
let testArr = [{name:'鸣人',age:16},{name:'佐助',age:17},{name:'卡卡西',age:26}]
let index = testArr.findIndex(item => { return item.age > 16 });
// => 1
8.1:如果想对于引用类型,比如对象属性进行查找并反正索引的话可以使用lodash中提供的_.findIndex(),通过对象属性值直接获取对应索引
let testArr = [{name:'鸣人',age:16},{name:'佐助',age:17},{name:'卡卡西',age:26}]
let index = _.findIndex(testArr, {name:'佐助'});
// => 1
9.find:在数组中查找某个元素,和some一样,只有找到一个就返回并中断遍历
let testArr = [{name:'鸣人',age:16},{name:'佐助',age:17},{name:'卡卡西',age:27},{name:'佐助',age:17}]
let result = testArr.find(item => { return item.name == '佐助'});
// => { name:'佐助',age:17 }