javascript - 遍历对象及其属性的数组列表
问题描述
循环遍历一个对象及其所有属性的最佳方法是什么,然后移动到另一个对象等等......
目前,我的代码只循环通过 lvlTitle。而我想循环遍历 lvlTitle,然后转到 statement1、statement2 和 statement3,然后转到下一个对象。
谢谢你。
这是javascript:
// Different Levels
var lvls = {
start: {
lvlTitle: 'Lets Start!',
},
lvl1: {
lvlTitle: 'Drinks/Soda/water',
statement1: 'lvl1 info...',
statement2: 'lvl1 more info...',
statement3: 'lvl1 more more info...'
},
lvl2: {
lvlTitle: 'Portion Control/Meals',
statement1: 'lvl2 info...',
statement2: 'lvl2 more info...',
statement3: 'lvl2 more more info...'
},
lvl3: {
lvlTitle: 'Salt',
statement1: 'lvl3 info...',
statement2: 'lvl3 more info...',
statement3: 'lvl3 more more info...'
}
}
// Array of all the levels
var allLvls = [];
// Populate users array
for (var key in lvls) {
allLvls.push(lvls[key]);
}
console.log(allLvls[0].lvlTitle);
let myIndex = 1;
let printText = document.querySelector('.text-container');
printText.innerHTML = allLvls[0].lvlTitle;
function nextLevel() {
printText.innerHTML = allLvls[myIndex].lvlTitle;
myIndex = (myIndex + 1) % (allLvls.length);
};
printText.addEventListener('click', nextLevel);
这是HTML:
<div class="full-page">
<div class="click-container">
<ul class="text-container">
<li class="text-content">
<div></div>
</li>
</ul>
</div>
这里还有一个 jsFiddle:Iterate through Array List of Objects
解决方案
您可以创建一个递归函数。它将一个对象并创建一个列表(或您想要使用的任何 html 结构)。在该函数中查看每个属性,如果它没有处理它,它是一个对象将该对象传递回函数。这将适用于嵌套在任意深度的对象,并且是一个很好的技术:
// Different Levels
var lvls = {start: {lvlTitle: 'Lets Start!',},lvl1: {lvlTitle: 'Drinks/Soda/water',statement1: 'lvl1 info...',statement2: 'lvl1 more info...',statement3: 'lvl1 more more info...'},lvl2: {lvlTitle: 'Portion Control/Meals',statement1: 'lvl2 info...',statement2: 'lvl2 more info...',statement3: 'lvl2 more more info...'},lvl3: {lvlTitle: 'Salt',statement1: 'lvl3 info...',statement2: 'lvl3 more info...',statement3: 'lvl3 more more info...'}}
function printProps(obj){
let html = "<ul>"
Object.keys(obj).forEach(key => {
html += '<li>' + key + '</li>'
let next = (typeof obj[key] == 'object' ? printProps(obj[key]) : obj[key])
html += '<li>' + next + '</li>'
})
html += "</ul>"
return html
}
let d = document.getElementById('list')
d.innerHTML = printProps(lvls)
<div id = "list"></div>
推荐阅读
- ios - Database.database().reference() 为零
- swift - 从 ARKit 3 中的 3D Skeleton 检索骨骼旋转
- javascript - 无法将属性“max-content”添加到 @key-frames
- android - 写入存储打开失败时出错:android中的ENOENT(没有这样的文件或目录)
- soapui - 如何在 SOAP UI 中使用正则表达式断言
- php - 无法打开 FPDF 使用 Adobe Reader 生成 PDF
- c - 用 sizeof() 比较多维数组
- uitabbar - 无法在 iOS 13 中设置 UITabBar shadowimage
- javascript - 如何使用 charAt()?
- json - 如何使用打字稿将数据推送到外部 json 文件中?