vue数组和对象方法

变异方法:会改变原始数组

  1. push()
  2. pop()
  3. shift()
  4. unshift()
  5. splice()
  6. sort()
  7. reverse()

非变异方法:不会改变原始数组,但是会返回一个新数组

  • fliter()
  • slice()
  • concat()

vue不能检测变动的数组

利用索引值直接设置内容时 vm.items[indexOfItem] = newValue;

修改数组的长度时 vm.items.length = newLength;

//这种写法并不能实时检测到变化
var vm = new Vue({
  data: {
    items: [‘a‘, ‘b‘, ‘c‘]
  }
})
vm.items[1] = ‘x‘
vm.items.length = 2
//下面方法可以实时触发更新刷新
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
vm.items.splice(newLength)

vue不能检测对象属性的添加和删除

//  不是响应式的,不能检测到变化
var vm = new Vue({
  data: {
    a: 1
  }
})
vm.b = 2
//实时响应的
var vm = new Vue({
  data: {
    userProfile: {
      name: ‘Anika‘
    }
  }
})
//添加age属性
Vue.set(vm.userProfile, ‘age‘, 27)
vm.$set(vm.userProfile, ‘age‘, 27)

为已有对象赋予多个新属性   可以使用Object.assign() 或_.extend()

vm.userProfile = Object.assign({}, vm.userProfile, {
  age: 27,
  favoriteColor: ‘Vue Green‘
})

数组的过滤和排序   如果我们想要一个数组过滤或排序后的数据,并且不改变原始数组,可以使用计算属性

例:

<li v-for="n in evenNumbers">{{ n }}</li>
data: {
  numbers: [ 1, 2, 3, 4, 5 ]
},
computed: {
  evenNumbers: function () {
    return this.numbers.filter(function (number) {
      return number % 2 === 0
    })
  }
}

如果计算属性不适合用,还可以使用method方法

<li v-for="n in even(numbers)">{{ n }}</li>
data: {
  numbers: [ 1, 2, 3, 4, 5 ]
},
methods: {
  even: function (numbers) {
    return numbers.filter(function (number) {
      return number % 2 === 0
    })
  }
}

参考地址:https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC%82%E6%96%B9%E6%B3%95

原文地址:https://www.cnblogs.com/zsj-02-14/p/10483759.html

时间: 2024-08-26 10:27:08

vue数组和对象方法的相关文章

关于vue数组中对象属性变更页面没重新渲染的问题

前段时间做开发的时候用mqtt监听了服务端信息,推送过来的数据要变更数组里面的对象的数据,修改好后但是页面并没有更新,因为javascript机制,vue并不能检测到数组变化,也是查阅知道了$set()函数, 具体用法: arr.$set(index, { name : value }), index: 索引,name: 数组中对象的属性名, value: 要赋给属性的值 this.footerList.$set(i, { siteId : monitorSiteData[j].siteId,

vue数组中对象属性变化页面不渲染问题

做checkbox多选功能的时候遇到了一个坑,逻辑怎么看都对,但是就是有bug,最后发现数组那里值变了页面勾选没有重新渲染. 换了关键词搜索找到了相关方法. 其实之前读文档教程的时候看到过这里,但是只有真的使用之后才会有最直接的感触. ------------------------------------------- 数组更新检测 变异方法 Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新.这些方法如下: push() pop() shift() unshift() splic

vue数组和对象列表操作

1不可以直接通过下标添加数组     list[4]={……} 2通过数组的变异方法添加数组   push pop unshift shift splice sort reverse 3通过改变引用,改变地址空间,添加数组数据. *template占位符(可以包裹一些元素,但是并不会进行页面渲染) 多个相邻元素需要循环时,可以使用template包裹,外层不会出现多余父元素. 对象循环: v-for="(item,key,index) of userInfo" 数据可以进行直接修改,但

vue 数组和对象渲染问题

数组更新检测 在 vue 中使用数组的push().pop().shift().unshift().splice().sort().reverse() .filter().concat() 方法时,改变数组的同时可以触发视图的变化. 注意: 有两种情况 vue 无法检测到变动的数组,分别是: (1)直接操作数组的长度: (2)利用索引直接设置一个项时,例如:this.arr[indexOfItem] = newValue 代替方案如下 // Vue.set this.$set(arr, inde

数组常用对象方法

---恢复内容开始--- 1.push  在数组末尾添加一个或多个元素,并返回数组长度. 2,unshift  在数组前面添加一个或多个元素,并返回数组长度. 3,pop  删除最后一个元素,并返回删除的值. 4,shift  删除数组第一个元素,并返回被删除的元素. 5,slice  截取数组,得到新数组,不改变原数组. 语法:slice(start,end) 包含start,不包含end. 6,splice  向数组中 添加/删除 项目,返回删除项目,改变原数组. 语法:splice(1,2

vue遍历数组和对象的方法以及他们之间的区别

前言:vue不能直接通过下标的形式来添加数据,vue也不能直接向对象中加值,因为那样即使能加入值页面也不会跟着改变 一,vue遍历数组 1,使用vue数组变异方法 pops 删除数组租后一项 push 往数组里面增加一项 shift 删除数组第一项 unshift 往数组第一项里面加一线内容 splice 数组截取 sort 数组排序 reverse 对数组取反 2,数组的引用 3,vue set方法 二,vue遍历对象 1,对象引用 2,set方法 由于时间问题下回仔细说明,谢谢 原文地址:h

vue数组对象修改触发视图更新

直接修改数组元素是无法触发视图更新的,如 this.array[0] = { name: 'meng', age: 22 } 修改array的length也无法触发视图更新,如 this.array.length = 2; 触发视图更新的方法有如下几种 1. Vue.set 可以设置对象或数组的值,通过key或数组索引,可以触发视图更新 数组修改 Vue.set(array, indexOfItem, newValue) this.array.$set(indexOfItem, newValue

vue 关于数组和对象的更新

在日常开发中,我们用的最多的就是 绑定数据 <div v-for="item in data" :key="item.id"> <!-- 内容 --></div> 如果你有ng的开发经验,假设 data 你要更新数据了 this.data=res.data; 但是这在vue中 并不会起到作用,DOM并没有触发变化. vue不是已经实现的实时数据双向绑定,那么model层发生了变化之后,为什么view层没有更新呢??? 看官网 这里

JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)

1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一般来讲使用对象字面量来封装多个可选参数. 3.对象属性的点表示法与方括号表示法的区别 (1)功能上:两者没区别 (2)但是方括号的有点是可以通过变量来访问属性 例如: var person={ name:"Nic" } 点表示法:person.name 方括号表示法:var prop=“nam