执行这样的循环是不好的做法?我循环遍历所有汽车,并在每个颜色的名称上添加“新”文字。每辆车都有多种颜色。
var cars = [
{
company: "honda",
colors: [
{
name="burntRed"
},
{
name: "springGreen"
}
]
},
{
company: "ford",
colors: [
{
name="burntOrange"
},
{
name: "black"
}
]
}
];
for (var c = 0; c < cars.length; p++) {
var car = cars[c];
for (var i = 0; i < cars.colors.length; i++) {
car.color[i].name += 'new ' + car.color[i].name;
};
};
答案 0 :(得分:3)
您可以考虑使用不同的样式循环遍历数组。 Javascript提供了arrays的各种循环方法。
以下是您提议的功能的示例,在这里您可以发现更清晰的样式,因为不需要更多的索引变量。
顺便说一句,嵌套循环是不可避免的。
var cars = [{ company: "honda", colors: [{ name: "burntRed" }, { name: "springGreen" }] }, { company: "ford", colors: [{ name: "burntOrange" }, { name: "black" }] }];
cars.forEach(function (car) {
car.colors.forEach(function (color) {
color.name = 'new ' + color.name;
});
});
document.write('<pre>' + JSON.stringify(cars, 0, 4) + '</pre>');
答案 1 :(得分:2)
由于您迭代的数据结构是嵌套的,我没有看到另一种(更高性能)的方式来实现您的任务。
嵌套迭代不一定是坏事。甚至许多众所周知的算法依赖于它们。但是你必须非常小心你在最深的循环中执行什么,因为这些命令将经常执行。
答案 2 :(得分:1)
有点晚但嵌套循环通常很糟糕,因为它们难以测试和推理。我会采用更具声明性的方法:
const appendStringToColor = (string) => (color) => ({ name: `${color.name} ${string}` });
const appendNewToColor = appendStringToColor('new');
const updateCarWithColor = (car) => ({ ...car, colors: car.colors.map(appendNewToColor) });
const updateCarsColors = (cars) => cars.map(updateCarWithColor);