[英]How do I iterate through an array that is nested inside an object that is in turn nested in an array?
我要完成的工作:
检索所有licenseTypes(digger和shovler),以便可以将它们插入标头div中。
根据视图检索要在子标题(或正文)中使用的各个licenseTypes的subLicense。
我的数组如下所示:
const licenseType = [
{
diggerLisense: [
"Shallow Digger",
"Deep Digger"
]
},
shoverlerLicense: [
"Poop shovler",
"Grass shovler"
]
}
]
所以基本上,我有这个结构:
licenseType> subLicenseType> subSubLicenseType
我专门决定此嵌套顺序的原因有以下三个:
如有任何帮助或指责,在此表示感谢。 顺便说一句,我搜索了其他问题,但没有完全像我在这里描述的结构那样。
编辑:我要感谢你们都提供的压倒性的迅速反应。 你们的帮助速度如此之快,让我感到惊讶。 这是我在这里的第一个问题,我不敢相信响应的速度。
我目前正在处理所提供的建议,包括建议另一种格式的建议。 完成后,我将发布最终结果的小提琴。 谢谢所有stackoverflow社区的成员
您可以遍历licenseType
与Array.map()
对于每个对象,请获取第一个条目 ,然后返回要显示的内容:
const licenseType = [{"diggerLisense":["Shallow Digger","Deep Digger"]},{"shoverlerLicense":["Poop shovler","Grass shovler"]}]; const result = licenseType.map((o) => { const [license, subLicenses] = Object.entries(o)[0]; return ` <h1>${license}</h1> <ul> ${subLicenses.map((s) => `<li>${s}</li>`).join('\\n')} </ul> `; }); demo.innerHTML = result.join('\\n');
<div id="demo"></div>
但是,在对象中具有更改的密钥会使它不必要地复杂化。 我建议使用略有不同的格式:
{
license: 'digger',
sub: ['Shallow Digger', 'Deep Digger']
}
const licenseType = [{ "license": "digger", "sub": ["Shallow Digger","Deep Digger"]},{ "license": "shoverler", sub: ["Poop shovler","Grass shovler"]}]; const result = licenseType.map(({ license, sub }) => ` <h1>${license}</h1> <ul> ${sub.map((s) => `<li>${s}</li>`).join('\\n')} </ul> `); demo.innerHTML = result.join('\\n');
<div id="demo"></div>
尝试这个:
licenseType.forEach(element => {
element[Object.keys(element)[0]].forEach(subTypes => {
console.log(subTypes);
})
});
给定当前数据集,您可以执行以下操作。
但是,如果您的顶层数据结构是对象而不是数组,会更容易。
const licenseType = [ { diggerLisense: [ "Shallow Digger", "Deep Digger" ] }, { shoverlerLicense: [ "Poop shovler", "Grass shovler" ] } ]; const getLicenses = () => licenseType.map(license => Object.keys(license)[0]); const getData = (toFind) => licenseType.find(license => Object.keys(license)[0] === toFind); const getSubtypes = (license) => { const data = getData(license); if (data) { subTypes = data[license]; } return subTypes; }; console.log(getLicenses()); console.log(getSubtypes('shoverlerLicense'));
LicenseType is an array So you can access the license type like licenseType[i] where it represents the element of the array. for sub license type use
sublicensetype = []
for (i = 0; i < licenseType.length; i++) {
for ( var k in licenseType[i]) sublicenseType.push(k)
}
试试这个小提琴 :
licenseType.forEach(function (type) {
console.log('type', type);
Object.keys(type).forEach(function (typeKey) {
console.log('typeKey',typeKey);
console.log('typeValues',type[typeKey]);
});
});
另外,初始数组中存在语法错误:
const licenseType = [
{
diggerLisense: [
"Shallow Digger",
"Deep Digger"
]
},
{ //this bracket was missing
shoverlerLicense: [
"Poop shovler",
"Grass shovler"
]
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.