簡體   English   中英

嵌套循環-這是不好的做法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM