广告位联系
返回顶部
分享到

Vue中构造数组数据之map和forEach方法实现

JavaScript 来源:互联网 作者:佚名 发布时间:2022-10-01 20:46:04 人浏览
摘要

数组操作是前端最重要的数据操作,构造数组数据,又是数组操作中很常见的。本文将梳理下map和forEach方法在Vue项目中的使用。 想要深入理解这两个方法,一定要手写几次简易的实现

数组操作是前端最重要的数据操作,构造数组数据,又是数组操作中很常见的。本文将梳理下map和forEach方法在Vue项目中的使用。

想要深入理解这两个方法,一定要手写几次简易的实现,理解其中的要义。这里只考虑核心部分,一些边界问题就忽略了。

一、手写实现

简易map方法:

1

2

3

4

5

6

7

8

9

Array.prototype.myMap = function(callback) {

    const res = [];

    for (let i = 0; i < this.length; i++) {

        // 这里将回调函数的执行结果push进了新数组,

        // 因此map方法在回调函数中一定要有return。

        res.push(callback(this[i], i, this));

}

    return res;

}

简易forEach方法:

1

2

3

4

5

6

7

8

9

10

11

Array.prototype.myForEach = function (fn, context) {

  context = context || arguments[1];

  let len = this.length;

  let k = 0;

  while (k < len) {

    if (k in this) {

      fn.call(context, this[k], k, this);

    };

    k++;

  }

};

二、二者区别

相同点:

1,都对数组的循环语句做了封装(while循环)。

2,map能做的事,forEach也能做,反之亦然。

3,两者都可以修改原数组,通过回调函数实现。当然两者的回调函数都可以不对原数组做修改。

4,在两个方法中使用return,只能结束当前这一次循环,不能结束整个循环,因为return是写在回调函数中的。

不同点:

1,map方法返回一个新数组;forEach方法返回undefined。

2,map可链式调用,forEach不可以。因为forEach总是返回undefined。

3,除了抛出异常,没有办法终止或跳出forEach循环。

三、使用场景

以下两种情况不要使用map方法。

1,不打算使用返回的新数组。

2,没有在回调函数中返回值。

举个Vue中的例子:

比如后台接口返回一个对象数据,我们需要将此对象数据构造成为一个新数组,展示到elementUi中的select下拉框中。那么我们应该用map方法呢,还是forEach呢?

1

2

3

4

5

let data = {

    product: '产品',

    service: '服务',

    micServide: '微服务',

}

let keysArr = Object.keys(data)

// 用forEach方法

1

2

3

4

let res = []

keysArr .forEach(item => {

    res.push( { value: item, label: data[item] } )

})

// 用map方法

1

2

3

let res1 = data.map(item => {

    return { value: item, label:  }

})

// 在Vue项目中,直接将res 换成给当前组件data中的数据赋值即可。
由以上例子可见,当我们需要构造一个新的数组时,两种方法都能用,但是map方法要更简洁。因此,能用map方法的地方,首先要用map方法。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/qq_38845858/article/details/122717551
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计