小程序开发记录_详解vue数组遍历方法forEach和ma

发布时间:2021-01-08 11:29 作者:jianzhan

摘要: 详细说明vue数字能量数组解析xml方式forEach和map的基本原理分析和具体运用 本文关键详细介绍了详细说明vue数字能量数组解析xml方式forEach和map的基本原理分析和具体运用,网编感觉

详解vue数组遍历方法forEach和map的原理解析和实际应用       这篇文章主要介绍了详解vue数组遍历方法forEach和map的原理解析和实际应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

forEach和map是数组的两个方法,作用都是遍历数组。在vue项目的处理数据中经常会用到,这里介绍一下两者的区别和具体用法示例。

二、代码

1. 相同点

都是数组的方法 都用来遍历数组 两个函数都有4个参数:匿名函数中可传3个参数item(当前项), index(当前项的索引), arr(原数组),还有一个可选参数this 匿名函数中的this默认是指向window的 对空数组不会调用回调函数 不会改变原数组(某些情况下可改变)

2. forEach

(1) 没有返回值。

var a = [1,2,3,4,5]
var b = a.forEach((item) = {
 item = item * 2
console.log(b)
// undefiined

(2) 可改变原数组的情况

下面来看几个例子:

var a = [1,2,3,4,5]
a.forEach((item) = {
 item = item * 2
console.log(a)
// [1,2,3,4,5]

这里原数组并没有发生改变。

var a = [1,'1',{num:1},true]
a.forEach((item, index, arr) = {
 item = 2
console.log(a)
// [1,'1',{num:1},true]

这里修改item的值,依然没有修改原数组。

var a = [1,'1',{num:1},true]
a.forEach((item, index, arr) = {
 item.num = 2
 item = 2
console.log(a)
// [1,'1',{num:2},true]

当修改数组中对象的某个属性时,发现属性改变了。

为什么会这样呢?

这里就要引入栈(stack)内存和堆(heap)内存的概念了,对于JS中的基本数据类型,如String,Number,Boolean,Undefined,Null是存在于栈内存中的,在栈内存中储存变量名及相应的值。而Object,Array,Function存在于堆内存中,在堆内存中储存变量名及引用位置。

在第一个例子中,为什么直接修改item无法修改原数组呢,因为item的值并不是相应的原数组中的值,而是重新建立的一个新变量,值和原数组相同。

在第二个例子中,数组中的对象的值也没有改变,是因为新创建的变量和原数组中的对象虽然指向同一个地址,但改变的是新变量的值,即新对象的值为2,原数组中的对象还是{num:1}。

在第三个例子中,由于对象是引用类型,新对象和旧对象指向的都是同一个地址,所以新对象把num变成了2,原数组中的对象也改变了。

var a = [1,2,3,4,5]
a.forEach((item, index, arr) = {
 arr[index] = item * 2
console.log(a)
// [2,4,6,8,10]

在回调函数里改变arr的值,原数组改变了。

这个例子和例三其实同理,参数中的arr也只是原数组的一个拷贝,如果修改数组中的某一项则原数组也改变因为指向同一引用地址,而如果给参数arr赋其他值,则原数组不变。

其实想要知道参数中的item和arr是不是重新创建的变量,在回调函数中打印就知道了。

(3) vue中的应用

在处理数据时我经常用到这个方法,因为数据的传递以json格式,经常会收到数组中包含许多对象的数据。而后端传给我的数据有时候需要处理,例如把时间戳格式化为正常时间,代码如下:

// utils.js
const formatTime = date = {
 var newDate = new Date();
 newDate.setTime(date * 1000);
 const year = newDate.getFullYear()
 const month = newDate.getMonth() + 1
 const day = newDate.getDate()
 const hour = newDate.getHours()
 const minute = newDate.getMinutes()
 const second = newDate.getSeconds()
 return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
const formatNumber = n = {
 n = n.toString()
 return n[1] n : '0' + n
export {
 formatTime

有这样一个需求,充值金额需要在整数的基础上随机减去100或加上100,这时我在原始的数据基础上需要一个经过处理的新数组。

export default {
 data() {
 moneyList: [1000,2000,5000,10000,20000,50000]
 computed: {
 moneyList_new() {
 return this.moneyList.map((item) = {
 const random = Math.random() 0.5 1 : -1;
 return Math.floor(Math.random()*100) * random + item;

实际渲染处理过的数组就可以了~

三、结语

以上就是forEach和map的对比与实际应用,代码只是演示使用方法并非完全真实。希望对大家的学习有所帮助,也希望大家多多支持凡科。


  • 自己开发的Windows下模拟用

    总体目标:获取各种电子商务网站有关某一(类)特殊产品的评价。 规定: 1,如必须登陆可用目前账户全自动登陆,最好可以全自动键入认证码 2,能点一下网页页面中存有的“进行(

  • 网页游戏服务器端开发需

    )中插到java程序段和JSP标志,其转换成的内容的逻辑性性被封裝在标示和JavaBeans或者Enterprise JavaBeans TM构件)能够推行应用程序需要求的更为复杂的处理。由于Java在移植性、扩展性、多段

  • 成都网页设计与开发快速

    营造整体总体目标:把握网页页面网页页面设计方案计划方案的基本要素,学习培训学习培训网页页面网页页面设计方案计划方案的编写和有效合理布局、网页页面网页页面设计方案计

  • 企业网站建设的“颜”有

    公司网站针对公司主来讲便是真实身份的代表,就非常于“个人名片”。现阶段,网站的长相早已变为了客户对一个网站或公司最形象化的分辨规范了。据调研,客户在进到网站的第一

  • 网页开发中的重定向,具

    近期在学网络爬虫,发了目前一一部分恳求会回到302,随后在响应头里回到了一个新的网站地址location,随后访问器全自动便会向新的网站地址进行恳求,有时候候那样乃至能自动跳转三