数组操作是前端最重要的数据操作,构造数组数据,又是数组操作中很常见的。本文将梳理下map和forEach方法在Vue项目中的使用。
想要深入理解这两个方法,一定要手写几次简易的实现,理解其中的要义。这里只考虑核心部分,一些边界问题就忽略了。
一、手写实现
简易map方法:
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方法:
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呢?
let data = { product: '产品', service: '服务', micServide: '微服务', }
let keysArr = Object.keys(data)
// 用forEach方法
let res = [] keysArr .forEach(item => { res.push( { value: item, label: data[item] } ) })
// 用map方法
let res1 = data.map(item => { return { value: item, label: } })
// 在Vue项目中,直接将res 换成给当前组件data中的数据赋值即可。
由以上例子可见,当我们需要构造一个新的数组时,两种方法都能用,但是map方法要更简洁。因此,能用map方法的地方,首先要用map方法。
到此这篇关于Vue中构造数组数据-map和forEach方法梳理的文章就介绍到这了,更多相关Vue构造数组数据内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!