forEach,map, filter, find, sort,some等方法的学习总结

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 }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值