Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何简化对象迭代代码?_Javascript_Object_Iteration - Fatal编程技术网

Javascript 如何简化对象迭代代码?

Javascript 如何简化对象迭代代码?,javascript,object,iteration,Javascript,Object,Iteration,具有下一个对象: 2018: { 01: { 01: { key: value } 02: { key: value } 03: { key: value } }, 02: { ... } }, 2019: { 01: ... 如何简化下一个用于将值放入每个day对象的代码 for (let yearIndex in obj) { const year = obj[year

具有下一个对象:

2018: {
    01: {
         01: { key: value }
         02: { key: value }
         03: { key: value }
        },
    02: { ...  }
    },
2019: {
    01: ...
如何简化下一个用于将值放入每个day对象的代码

   for (let yearIndex in obj) {
      const year = obj[yearIndex]
      for (let monthIndex in year) {
        const month = year[monthIndex]
        for (let dayIndex in month) {
          const day = month[dayIndex] {
              console.log(day)
          }
        }
      }
    }
理想的结果可能是一个包含每天对象的数组:

[{ key: value }, { key: value }, ...]

如果您只是尝试获取树的叶子(换句话说,值本身不是对象),那么您可以创建一个简单的递归函数。当您不知道嵌套的深度时,这种方法尤其有效

这将查看每个值,如果它是对象,则将其传递回。否则会将其推送到阵列:

let obj={2018:{'01':{01:'test18_11',02:'test18_12',03:'test18_13',},'02':{01:'test18_21',02:'test18_22',03:'test18_23',2019:{'01':{'01:'test19_11',02:'test19_12',03:'test19_13',},'02':{01:'test19_22',03:'test19_23'
函数递归(obj,a=[]){
Object.values(obj.forEach)(值=>{
if(typeof value==='object')返回递归(value,a)
否则a.push(值)
})
归还
}
console.log(递归(obj))
const obj={
2018: {
01: {
01:‘01第一’,
02:‘01秒’,
},
02: {
01:‘02第一’
}
},
2019: {
01: {}
}
};
Object.values(obj.forEach)(年份=>{
Object.values(年).forEach(月=>{
Object.values(月).forEach(日=>{
控制台日志(天);
})
})

})
您可以通过检查递归调用的类型来展开对象

函数getFlat(对象){ 返回[]。concat( 对象 .值(对象) .map(值=>value&&typeof值===“对象”?getFlat(值):对象) ); } var object={2018:{01':{01':{key:1},'02':{key:2},'03':{key:3},'02':{key:4},'02':{key:5},'03':{key:6},2019:{01':{key:7},'02':{key:8},'03':{key:9};
log(getFlat(object))我认为这个问题更适合
Object.entries(obj).map([yearIndex,year])=>Object.entries(year).map([monthIndex,month])=>…
也可以简单地进一步使用
Object.values
,如果你不关心标记的话。@mhodges询问如何缩短/简化代码是关于SO的主题…顺便问一下,
response.val()是什么
重新调整?@JaredSmith只是说“更适合”。我没有投票决定关闭或关闭。