我想要完成的事情:
检索所有licenseTypes(digger和shovler),以便我可以将它们插入标题div中。
检索相应的licenseTypes' sublicenses将在子标题(或可能是正文)中使用,具体取决于视图。
我的数组看起来像这样:
const licenseType = [
{
diggerLisense: [
"Shallow Digger",
"Deep Digger"
]
},
shoverlerLicense: [
"Poop shovler",
"Grass shovler"
]
}
]
基本上,我有这个结构:
licenseType> subLicenseType> subSubLicenseType
我特别决定了这个嵌套订单有三个原因:
这里非常感谢任何帮助或指责。顺便说一句,我已经搜索了其他问题,并没有完全像我在这里描述的结构。
编辑:我要感谢你所提供的压倒性和迅速的回应。我很惊讶你们有多快帮助你们。这是我在这里的第一个问题,我无法相信答复的速度。
我目前正在处理提供的建议,包括建议采用不同格式的建议。我将在完成后发布最终结果的小提琴。感谢stackoverflow社区的所有成员
答案 0 :(得分:4)
您可以使用Array.map()
迭代licenseType
。对于每个对象,获取第一个entry,并返回您想要显示的内容:
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>
答案 1 :(得分:0)
试试这个:
licenseType.forEach(element => {
element[Object.keys(element)[0]].forEach(subTypes => {
console.log(subTypes);
})
});
答案 2 :(得分:0)
根据您当前的数据集,您可以执行以下操作。
但是,如果您的顶级数据结构是一个对象而不是一个数组,那将会更容易。
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'));
答案 3 :(得分:0)
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)
}
答案 4 :(得分:0)
尝试this fiddle:
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"
]
}
]