当对2个数组的值求和时,如何将值限制在新数组中?

问题描述 投票:0回答:1

想法是将两种颜色的rbg值混合在一起,并保持我的代码整洁。一个rgb的值不能超过255。我想做的是,如果数值超过255,则在添加值之后,将其保持在255。

我尝试过的一种方法有效,但是我觉得这里有重复的代码。我尝试过的另一种方法似乎在正确的轨道上,但是不起作用。

这是工作方式

const mixColors = (color1, color2) => {
    let red = color1[0] + color2[0];
    let green = color1[1] + color2[1];
    let blue = color1[2] + color2[2];

    if (red > 255) {
        red = 255;
    }
    if (green > 255) {
        green = 255;
    }
    if (blue > 255) {
        blue = 255;
    } else console.log(`rgb: ${red}, ${green}, ${blue}`);
};
mixColors([235, 45, 0], [100, 27, 47]);

这是我试图简化代码,但是没有用。作为一个单独的问题,为什么这种方式行不通?这些值被正确添加,似乎只是跳过了我的if语句。

const mixColors = (color1, color2) => {
    const newColor = color1.map((a, i) => a + color2[i]);

    if (newColor > 255) {
        newColor[i] = 255;
    }

    console.log(newColor);
    return newColor;
};
mixColors([235, 45, 0], [100, 27, 47]);

第一种方法是最好的方法,我已经过度考虑了吗?或者,还有更好的方法?

javascript arrays addition
1个回答
2
投票

您的newColor是一个数组,因此newColor > 255没有任何意义(并且不起作用)。将Math.min放在.map回调中:

const mixColors = (color1, color2) => color1.map((num, i) => Math.min(num + color2[i], 255));
console.log(mixColors([235, 45, 0], [100, 27, 47]));
© www.soinside.com 2019 - 2024. All rights reserved.