[英]Nested Loop - Is This Bad Practice
执行这样的循环会不好吗? 我遍历所有汽车,并将“ new”文本附加到每种颜色的名称上。 每辆车可以有多种颜色。
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;
};
};
由于要迭代的数据结构是嵌套的,因此我看不到另一种(性能更高)的方法来完成您的任务。
嵌套迭代不一定是一件坏事。 甚至许多著名的算法都依赖它们。 但是您必须非常谨慎地执行最深层的循环,因为这些命令会经常执行。
您可能会考虑使用其他样式来遍历数组。 Javascript提供了各种数组的循环方法。
这是您建议的功能的一个示例,由于不需要更多的索引变量,因此您可以在此处发现更简洁的样式。
顺便说一句,嵌套循环是不可避免的。
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>');
有点晚了,但是嵌套循环通常是不好的,因为它们很难测试和推理。 我将采用一种更具声明性的方法:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.