如何顺序遍历对象的key

如下是后台返回数据
clipboard.png

[
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  },
  {
    "十字星D": 2750000.0,
    "悠然农庄": 2142172.1467,
    "阿凡达": 1000000.0,
    "七六项目": 0.0,
    "for": 1000000.0,
    "大师钱包(全称)": 9000000.0,
    "暴走漫画": 1500000.0,
    "小袋鼠艺术W": 2000000.0,
    "考王教育D": 5100000.0
  }
]

我需要将对象中的key顺序的push到一个数组中,最终结果
["十字星", "悠然农庄", "阿凡达", "七六项目", "for" 。。。。]
由于for in 和 Object.keys()返回对象的key都是无序的所以根本拿不到正确的顺序

目前我的思路如下,既然返回的key是无序的那么干脆用Object.keys拿到的数组顺序去重组返回的list
结果依然不行,求教我该怎么做

先拿到Object.keys返回的数组columns
let columns = [];
let once = []
   list.forEach((item, current) => {
     columns = Object.keys(item)
   })
再用拿到的columns做循环 obj添加属性的时候依然是无序的
list.forEach(item => {
          let obj = {};
          columns.forEach(c => {
            obj[c] = item[c]
            // console.log(obj)
            // console.log(c," :",item[c])
          })
          once.push(obj)
        })
阅读 11.8k
4 个回答
        let obj = {
            "十字星D": 2750000.0,
            "悠然农庄": 2142172.1467,
            "阿凡达": 1000000.0,
            "七六项目": 0.0,
            "for": 1000000.0

        }

        function json2arr(obj) {
            let arr = JSON.stringify(obj).replace(/^{|}$/g, '').split(',')
            return arr.map((item) => {
                return item.split(":")[0]
            })
        }
        console.log(json2arr(obj))

对象本身就是无序的,控制台打印的都是按照各引擎指定的规则打印的,并不代表它本身。

你都既然返回的key是无序的那么干脆用Object.keys拿到的数组顺序又为什么去重组返回的list?直接遍历这个数组不就是遍历对象的key值?这个顺序不对,你还可以按照你的规则排序,不过一般的都是写死一个数组,如果是不固定的,那就让后台传过来。

var arr = [...]
var keys = ['k1','k2'...]
arr.forEach(item=>{
    keys.forEach(key=>{
        console.log( item[key] )
    })
})

key 怎么还有中文的,这不符合规范吧。如果只想遍历每一个对象里面的key,可以用for in 循环即可

老弟,你这不对啊,我了解的是如果对象的key值是数字的话,或者可以用parseInt转换成数字的话,才会将key值排序,出现无序的情况, 可是你的案例都没有数字啊, 我试了一下是正常顺序输出的啊, 我用的chrome ,请问你这怎么解释

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题