js 对象循环拿值?

js 数组对象的拿值
原始数据:

let arr= {
   1: {
         lists: {
            2020: {count: 0, year: 2020 },
            2021: {count: 3, year: 2021 },
            2022: {count: 2, year: 2022 },
            2023: {count: 1, year: 2023 },
         },
         name: '数据1',
       },
      2: {
         lists: {
            2020: {count: 1, year: 2020 },
            2021: {count: 2, year: 2021 },
            2022: {count: 3, year: 2022 },
            2023: {count: 4, year: 2023 },
         },
         name: '数据2',
       },
       3: {
         lists: {
            2020: {count: 3, year: 2020 },
            2021: {count: 2, year: 2021 },
            2022: {count: 3, year: 2022 },
            2023: {count: 4, year: 2023 },
         },
         name: '数据3',
       }
}

这是后端返回的数据,前端需要处理数据
let data1 =['数据1','数据2',''数据3]
这个我已经得到了,就是里面的lists数据还没处理好。
希望得到:

let data2 = ['2020','2021','2022','2023']
let data3 = ['0','3','2','1']
let data4 = ['1','2','3','4']
let data5 = ['3','2','3','4']

遍历对象我用了for in, 还有其他好一些的方式吗?

用了for in去处理,lists数据没处理好
我用了

           let arrKey =[]
           let year =[]
           for(var i in arr) {
                   arrName.push(arr[i].typename)
                   for (var s in arr[i].lists) {
                       arrKey.push(arr[i].lists[s].count)
                       year.push(arr[i].lists[s].year)
                   }
               }
           得到: arrName:['数据1','数据2',''数据3] 这个数据是对的
                 arrKey 和 year 数据出现很多重复的

阅读 878
4 个回答
新手上路,请多包涵
for (var item in arr) {
    for (var s in arr[item].lists) {
        console.log(arr[item].lists[s].count)
        console.log(arr[item].lists[s].year)
    }
    console.log(arr[item].name)
}

用了for in,在用其他数组的方式解决了。

新手上路,请多包涵
let nameArr = [];
let yearArr = [];
let data = [];
Object.values(arr).map((item) => {
    nameArr.push(item.name);
    let e = [];
    Object.values(item.lists).map((iten) => {
        yearArr = [...new Set([...yearArr, iten.year])];
        e.push(iten.count);
    });
    data.push(e);
  });
console.log(nameArr, yearArr, data);
let years = []
const names = []
const values = []
Object.values(arr).forEach(item => {
  !names.includes(item.name) && names.push(item.name)
  // 如果格式都一样,只取一次得了
  !years.length && (years = Object.keys(item.lists))
  // 如果list的key和year一一对应直接写
  values.push(Object.values(item.lists).map(data => data.count))
})
console.log(names) // ['数据1', '数据2', '数据3']
console.log(years) // ['2020', '2021', '2022', '2023']
console.log(values) // [ [0, 3, 2, 1], [1, 2, 3, 4], [3, 2, 3, 4] ]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题