3 回答
TA贡献1876条经验 获得超6个赞
carBrands.flatMap(Object.entries) .map(([key, { models, unitsAvailable }]) => `${key} ${models.join(", ")} ${unitsAvailable}`) .forEach(v => console.log(v))
TA贡献1155条经验 获得超0个赞
因为您的数组由 dict 对象组成,所以您需要考虑到您需要迭代键。在不修改输入的情况下,您可以使用以下代码来处理数据结构的内部值:
// For all defined objects
carBrands.forEach((object) => {
// Determine manufacturers inside the current object (only 1 manufacturer per object in your case)
var manufacturers = Object.keys(object);
// For each manufacturer
manufacturers.forEach((manufacturer) => {
// Print manufacturer name
console.log("Manufacturer: " + manufacturer);
console.log("Models:");
// For all models
var models = object[manufacturer].models;
models.forEach((model) => {
// print model name
console.log(" " + model);
});
// print available units
console.log("Available units:");
console.log(" " + object[manufacturer].unitsAvailable + "\n");
});
});
输出:
Manufacturer: Audi
Models:
A1
A2
A3
A4
Available units:
378
Manufacturer: BMW
Models:
M1
M2
M3
M4
Available units:
413
Manufacturer: Honda
Models:
H1
H2
H3
H4
Available units:
226
TA贡献2039条经验 获得超7个赞
您遇到的问题是因为您使用的顶级密钥是唯一的。而不是命名您的键Audi,BMW等等。我会使用一个通用键make,并将其值设置为您的品牌。这样,当您执行循环时,您每次都可以请求相同的密钥:
const carBrands = [
{
make: 'Audi',
models: ["A1", "A2", "A3", "A4"],
unitsAvailable: 378
},
{
make: 'BMW',
models: ["M1", "M2", "M3", "M4"],
unitsAvailable: 413
},
];
carBrands.forEach(brand => {
console.log(brand.make);
brand.models.forEach(model => console.log(model));
});
由于您谈到要维护对象中的关系,我鼓励您考虑如何将此信息存储在数据库中,并以此为基础组织您的组织。
有很多carBrands。每个carBrand都有一个make, unitsAvailable, 并且有很多models.
您不会为每个创建一个新表carBrand,对吗?您将添加一个新行。因此,按照上面的方式构建它更接近于将其保存在数据库中的方式,这有利于数据完整性并使其更加灵活。
在这种结构中,通过 make 获取东西仍然很容易,例如:
let audiModels = carBrands.filter(brand => brand.make == 'Audi').models;
TA贡献1806条经验 获得超5个赞
这里的所有答案都是“正确的”,非常感谢你们!所以没有一个比另一个更好。
我认为乔纳森对我过于复杂的数据结构提出了一个很好的观点。我将回到更简单的版本,其中“Audi”等将是一个值,而不是一个键。
但我还将按照 Mottek 的建议构建当前结构和访问数据的示例。
当我深入到项目中时,我将决定哪个是最终版本。
感谢大家的大力帮助!
添加回答
举报