[英]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.