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只是说“更适合”。我没有投票决定关闭或关闭。