美文网首页
JavaScript中数组方法 forEach、map、ever

JavaScript中数组方法 forEach、map、ever

作者: 该帐号已被查封_才怪 | 来源:发表于2018-08-15 19:00 被阅读170次

一、forEach

1、返回值的情况:无返回值(undefined);
2、原数组是否改变:如果是通过值类型的方式修改,则不会改变,如果通过下标的方式或者通过引用类型的方式修改,则原数组会发生变化;

3、遍历中断条件:无法中断, 除非 throw Error,但是这样做没有意义,因为会导致整个程序全部终止;

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]


image.png
      // forEach 方法---不是通过下标的修改方式
      const forEachArray1 = [10, 20, 30, 40];
      const forEachRet = forEachArray1.forEach(item => item + 1)
      console.log('forEach的forEachArray1结果', forEachRet);
      console.log('forEach的forEachArray1原有数组', forEachArray1);

      // forEach 方法---通过修改下标的方式
      const forEachArray2 = [20, 40, 60, 80];
      const forEachRet1 = forEachArray2.forEach((item, index) => forEachArray2[index] = item + 1)
      console.log('forEach的forEachArray2结果', forEachRet1);
      console.log('forEach的forEachArray2原有数组', forEachArray2);


image.png

二、map

1、返回值的情况:如果不return 则无返回值(undefined),否则有返回值;
2、原数组是否改变:如果是通过值类型的方式修改,则不会改变,如果通过下标的方式或者通过引用类型的方式修改,则原数组会发生变化;
3、遍历中断条件:无法中断, 除非 throw Error,但是这样做没有意义,因为会导致整个程序全部终止;

var arr1 = [
   {name:'鸣人',age:16},
   {name:'佐助',age:17}
];
var arr2 = [1,2,3];
var aa=arr1.map((item)=>{item.age=item.age+1})
image.png
      // map 方法---不是通过下标的修改方式
      const mapArray1 = [10, 20, 30, 40];
      const mapRet = mapArray1.map(item => item + 1);
      console.log('map的结果--有返回值', mapRet);
      console.log('map的原有数组--无变化', mapArray1);

      // map方法---通过修改下标的方式
        const mapArray2 = [20, 40, 60, 80];
        const mapRet2 = mapArray2.map((item, index) => {
          mapArray2[index] = item + 1;
          return item
        });
        console.log('map的mapArray2结果', mapRet2);
        console.log('map的mapArray2原有数组', mapArray2);


image.png

三、every

1、返回值的情况:只要回调函数返回的值当中有一个是false,则返回值是false,否则返回值为true;
2、原数组是否改变:如果是通过值类型的方式修改,则不会改变,如果通过下标的方式或者通过引用类型的方式修改,则原数组可能会发生变化;注意返回值的情况,如果返回值为false,则会中断整个循环,导致后续的数组项不会继续执行。
3、遍历中断条件:只要回调函数返回的值为false,则会立即中断;

var arr1 = [
   {name:'鸣人',age:16},
   {name:'佐助',age:17}
];
var arr2 = [1,2,3];
var aa=arr1.every((item)=>{item.age=item.age+1})
image.png
      // every 方法--- 用法1 如果所有都满足条件就返回true 否则返回false
      const everyArray1 = [10, 20, 30, 40];
      const everyRet = everyArray1.every(item => item > 21)
      console.log('every的everyArray1结果', everyRet);
      console.log('every的everyArray1原有数组', everyArray1);

      // every 方法--- 用法2  通过修改下标的方式修改原有数组
      const everyArray2 = [20, 40, 60, 80];
      const everyRet1 = everyArray2.every((item, index) => everyArray2[index] = item + 1)
      console.log('every的everyArray2结果', everyRet1);
      console.log('every的everyArray2原有数组', everyArray2);

      // every 方法--- 用法3  回调函数如果返回false 则循环会立刻终止
      const everyArray3 = [120, 140, 160, 180];
      const everyRet3 = everyArray3.every((item, index) => {
        console.log(`【前】index是${index}`);
        if (index === 2) {
          return false
        }
        console.log(`【后】index是${index}`);
        return true
      })
      console.log('every的everyArray3结果', everyRet3);
      console.log('every的everyArray3原有数组', everyArray3);


image.png image.png

四、some

1、返回值的情况:只要回调函数返回的值当中有一个是true,则返回值是true,否则返回值为false;
2、原数组是否改变:如果是通过值类型的方式修改,则不会改变,如果通过下标的方式或者通过引用类型的方式修改,则原数组可能会发生变化;注意返回值的情况,如果返回值为true,则会中断整个循环,导致后续的数组项不会继续执行。
3、遍历中断条件:只要回调函数返回的值为true,则会立即中断;

var arr1 = [
   {name:'鸣人',age:16},
   {name:'佐助',age:17}
];
var arr2 = [1,2,3];
var aa=arr1.some((item)=>{item.age=item.age+1})
image.png
      // some 方法--- 用法1 只要回调函数返回了true 则返回true 否则返回false
      const someArray1 = [10, 20, 30, 40];
      const someRet = someArray1.some(item => item > 21)
      console.log('some的someArray1结果', someRet);
      console.log('some的someArray1原有数组', someArray1);

      // some 方法--- 用法2  通过修改下标的方式修改原有数组
      const someArray2 = [20, 40, 60, 80];
      const someRet1 = someArray2.some((item, index) => someArray2[index] = item + 1)
      console.log('some的someArray2结果', someRet1);
      console.log('some的someArray2原有数组', someArray2);

      // some 方法--- 用法3  回调函数如果返回false 则循环会立刻终止
      const someArray3 = [120, 140, 160, 180];
      const someRet3 = someArray3.some((item, index) => {
        console.log(`【前】index是${index}`);
        if (index === 2) {
          return false
        }
        console.log(`【后】index是${index}`);
        return true
      })
      console.log('some的someArray3结果', someRet3);
      console.log('some的someArray3原有数组', someArray3);


image.png

另:这里简单提一下reduce和filter方法:
1、reduce 返回的是累计器累计完后的单个值,原数组不会发生变化;

      // reduce 方法
      const reduceArray1 = [10, 20, 30, 40];
      const firstVal = 100;
      const reduceFunc = (lastReturn, item) => lastReturn + item
      const reduceRet = reduceArray1.reduce(reduceFunc, firstVal)
      console.log('reduce的结果---有返回值', reduceRet);
      console.log('reduce的原有数组--无变化', reduceArray1);
image.png

2、filter 返回的是一个新数组,数组里的内容是回调函数运行后为true的各项值;

      // filter 方法
      const filterArray1 = [10, 20, 30, 40];
      const filterFunc = item => item > 22
      const filterRet = filterArray1.filter(filterFunc)
      console.log('filter的结果---有返回值', filterRet);
      console.log('filter的原有数组--无变化', filterArray1);
image.png

相关文章

网友评论

      本文标题:JavaScript中数组方法 forEach、map、ever

      本文链接:https://www.haomeiwen.com/subject/bgsvbftx.html