forEach()、find()、map()、filter()、some()、Object.assign()、Object.is()

1. forEach()
    forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。forEach() 是会循环完数组的每一项。
下面看看我用到的forEach的几种情况:
一是通过循环数组的每一项,找到符合条件的元素加以使用。

上面这种情况既然是找到符合条件的就可以了,那为什么不用find呢?foreach还会遍历完整个数组。因为该方法里写了业务逻辑,不符合find方法的使用目的。

二是改变数组,把表单的值给到数组,从而数组多一项instanceId。


2. find() 
   find() 方法返回用过符合测试(通过函数判断)的数组的第一个元素的值。
   find() 方法为数组中的,每个元素都调用一次函数执行:

  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
  • 如果没有符合条件的元素返回 undefined。
  • find() 对于空数组,函数是不会执行的, find() 并没有改变数组的原始值。
    const arr = [34, 65, 87, 48, 99];
    // find() 方法
    const arrNew = arr.find(num => {
        return num >= 66;
    });
    console.log(arrNew); // 87

    总之,find()方法目的是找出符合条件的那项元素,然后不会再往后执行,不对数组做过多的操作 

3. map() 
      map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
      map() 方法按照原始数组元素顺序依次处理元素。
      map() 不会对空数组进行检测,不会改变原数组。
适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()等组合使用)来玩出更多的花样

let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(value => value * value).filter(value => value > 10);
// arr2 = [16, 25]
var a = [1,2,3,4];
var newa = a.map(function(x){
 return x = x+1;
});
console.log(newa,a); 
//newa : 2 3 4 5   //a: 1 2 3 4

4. filter()
      filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
      filter() 不会对空数组进行检测,不会改变原数组。因为都是对元素的遍历,所以我猜想 如果把map中调用的函数换成filter里面的过滤函数是否能得到相同的结果呢。

var a = [1,2,3,4];
var newa = a.filter(function(x){
 return x > 1;
});
console.log(newa,a); 
//newa : 2 3 4    //a: 1 2 3 4

因为都是对元素的遍历,所以  如果把map中调用的函数换成filter里面的过滤函数是否能得到相同的结果呢。 

var a = [1,2,3,4];
var newa = a.map(function(x){
 return x > 1;
});
console.log(newa,a); 
//newa :false true true true     //a: 1 2 3 4

可以看出来newa 的到的并不是数字,它们只是对当前元素调用函数后(x是否大于1)的结果。而filter 会将结果为true的数组存到新的数组里面。

5. some()

some() 方法用于检测数组中的元素是否满足指定条件(函数提供), 返回true或false
some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

some() 不会对空数组进行检测,不会改变原数组。

 getDbData(dbList: any) {
    this.dbList = dbList;
    this.formInvalid = dbList.some((item) => item.formInvalid === true);
  }  // 查看数组中的formInvalid值是true还是false

5. Object.assign()

Object.assign(target, source_1, ···) 用于将源对象的所有可枚举属性复制到目标对象中。

const target = { a: 1, b: 2};
const source = { b: 4, c: 5};
// 第一个参数是目标对象,后面的参数是源对象,可以有多个源对象
const returnedTarget = Object.assign(target, source); 

console.log(target);
console.log(returnedTarget);

// {a: 1, b: 4, c: 5}
// {a: 1, b: 4, c: 5}

可以看到:

  • 如果目标对象和源对象有同名属性,或者多个源对象有同名属性,则源对象属性会覆盖目标的属性(目标对象的属性b替换掉目标对象的属性b)。
  • 如果该函数只有一个参数,当参数为对象时,直接返回该对象;当参数不是对象时,会先将参数转为对象然后返回
Object.assign(3);   
consol.log(Object.assign(3))      // Number {3}
typeof Object.assign(3);    // "object"

Object.assign("name");        
console.log(Object.assign("name")) 
// String {'name'}
   0: 'n'   
   1: 'a'
   2: 'm'
   3: 'e'
length: 4
Object.assign([2,3], [5]);  // [5,3]

 会将数组处理成对象,所以先将 [2,3] 转为 {0:2,1:3} ,然后再进行属性复制,所以源对象的 0 号属性覆盖了目标对象的 0。

6. Object.is()

Object.is(value1, value2)用来比较两个值是否严格相等,与(===)基本类似。

Object.is("q","q");      // true
Object.is(1,1);          // true
Object.is([1],[1]);      // false
Object.is({q:1},{q:1});  // false

与( === )的区别

//一是+0不等于-0
Object.is(+0,-0);  //false
+0 === -0  //true
//二是NaN等于本身
Object.is(NaN,NaN); //true
NaN === NaN  //false

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值