JS 数据操作(对象、数组)

   前言:这里主要是针对 数组、对象作为保存 数据的功能来说明。而不是 作为 面向对象的操作的对象。
              在 接口联调中,经常会用到 数据拷贝、删除 属性 等功能。这里就做一个总结。

JS对象

  • JS中Object的属性是有序的,只是不能完全保证顺序(遍历规则会根据 key 值类型的不同而不同):https://mp.weixin.qq.com/s/Pg4HWdReVetmiCWY7jDHsw 
    • Key 都为自然数:当前的 key 如果是自然数就按照自然数的大小进行升序排序。
    • Key 都为 String:如果 key 是不为自然数的 String(Number 也会转为 String)处理,则按照加入的时间顺序进行排序(即,按 插入顺序排序)。
    • Key 都为symbol:如果 Key 都为 Symbol,顺序和 String 一样,也是按照添加的顺序进行排序的。
  • JS对象的  浅拷贝方法:
    浅拷贝创建一个新的对象,只拷贝一层,即拷贝对象里第一层基本数据类型的值和引用类型的地址
    • Object.assign()
    • 展开运算符 Spread ...
  • JS对象的  深拷贝方法:
    深拷贝就是在堆内存中开辟一个新的空间存放新对象,拷贝原对象的所有属性,拷贝前后两个对象互不影响
    • 递归实现
    • JSON.parse(JSON.stringify(obj))
    • lodash工具包(第三方工具)

JS 数组

  • JS数组的 浅拷贝方法:
    • 展开运算符 Spread ...
    • Array.prototype.concat():concat 省略了参数,则 会返回调用此方法的现存数组的一个浅拷贝。
      var arr_old = [1, 2, {name: 'Tom'}]
      var arr_new = arr_old.concat()  // concat 省略了参数,则 会返回调用此方法的现存数组的一个浅拷贝。
      
      console.log(arr_old === arr_new)  // false
      console.log(arr_old[2]=== arr_new[2])  // true
    • Array.prototype.slice():slice 省略了参数,则 会返回调用此方法的现存数组的一个浅拷贝。
      let arr_old = [1, 2, {name: 'Tom'}]
      let arr_new = arr_old.slice()  // slice 省略了参数,则 会返回调用此方法的现存数组的一个浅拷贝。
      
      console.log(arr_old === arr_new)  // false
      console.log(arr_old[2]=== arr_new[2])  // true
  • JS数组的 深拷贝方法:
    • 递归实现
    • JSON.parse(JSON.stringify(obj))
    • lodash工具包(第三方工具)

总结:对象、数组的浅拷贝的方法 差异比较大,因为他们的都是各种方法中的附带功能。
     如果拷贝的数据只有一层,那 浅拷贝就是 深拷贝。所以处理表单数据,大部分只要使用浅拷贝就可以了。


 

删除对象属性(接口联调)

JS中表单提交,如果表单比较复杂时,往往会涉及 用户不同的选择,其它表单项 会显示/隐藏。

这种情况在提交表单时,肯定不能把隐藏的表单项的字段提交上去。所以需要删除对象的属性值。

删除JS对象属性的方法:https://blog.csdn.net/FantasyBreaker/article/details/125386520

1、将属性设置为 undefined  【个人推荐这种方式】

 

2、使用 delete 操作符

 

3、使用对象解构

 

4、使用Reflect

 

5、删除数组元素

  • delete(不推荐,没有真正删除,只是改变了值)
    delete arr[0];
    删除后数组长度不变,原索引下元素变为null。
  • splice
posted @ 2018-06-12 13:45  吴飞ff  阅读(105)  评论(0编辑  收藏  举报