当对象变为复杂对象时,输出的key就变得复杂

后端返回数据:

 前端遍历key值:

解决办法

objectOrder(obj) {
      //排序的函数

      var newkey = Object.keys(obj).sort() //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组,这行是最重要的代码!

      var newObj = {} //创建一个新的对象,用于存放排好序的键值对3
      for (var i = 0; i < newkey.length; i++) {
        //遍历newkey数组

        newObj[newkey[i]] = obj[newkey[i]] //向新创建的对象中按照排好的顺序依次增加键值对
      }

      return newObj //返回排好序的新对象
    },
循环对象时,顺序为什么会乱?

1.这本身就是一个ECMA的一个规范,数字按升序输出,字符串按创建顺序输出,并且数字优先级高于字符串
2.JS本身是不能被计算机识别,需要通过V8转化为字节码
3.那么针对ECMA的一个规范,v8对这个规范做的优化策略
4.排序属性 elements,用来存储数字。 常规属性 properties 用来存储字符串。为了优化,引入对象内属性
5.对象属性多后,会采用慢属性来存储数据,快属性就是采用线性数据结构,慢属性就是采用非线性结构,比如字典来存储数据。
 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐