使用LESS循环遍历数组 - 修改值 - 获取新数组

时间:2015-07-21 01:00:00

标签: arrays loops less

我想遍历一个数组,修改每个项目,然后用修改后的项目吐出一个新数组。

我对foobar示例非常厌恶,因为它们如此抽象......但它似乎很奇怪适用于此:

注意:这是半伪代码,因为我显然不知道这是如何工作的。

.loop (@var)
    @array: (@var + 1), (@var + 2), (@var + 3);
    // outputs @array: var1, var2 var3; (when @var = var)

    .-(@i: length(@array)) when (@i > 0) {
        @item: e(extract(@array, @i));

        @newItem: @item + bar;

    .-((@i - 1));

    @newArray:@newItem,@newItem,@newItem;// ????
).-;

.test {
    .loop ('foo');
}

在上面的示例中,使用foo调用循环应输出foo1bar, foo2bar, foo3bar

或者其他......最后一点是棘手/混乱的部分。这可能不是我访问数组的方式,而是类似的......

总结一下:我想通过循环传递单个变量。在循环中,根据该变量定义一个数组(想象一下将单个颜色分成单独的值)。然后使用这个新数组,我想遍历其中的每个项目,修改它(想象使每个值变暗),然后获得一个包含这些新修改值的新数组。

另一个例子:

.loop (@color: red) {
    @separations: red(@color), green(@color), blue(@color);
    // outputs 255, 0, 0

    .-(@i: length (@array)) when (@i > 0) {
        @sep: e(extract(@array, @i));

        @newSep: floor(@sep / 2);
    .-((@i - 1));

    } .-;

    @newArray: @item{i};
    //outputs @newArray: 127, 0, 0;
}

不,我不只是试图改变颜色的色调。我试图获得给定颜色的相对亮度,这需要定义一个颜色,将其分成一个单独的rgb值数组,对每个颜色进行一些条件数学运算,然后得到一个新颜色这些修改后的值的数组 - 然后需要插入公式中。

希望这个模糊/详细。

感谢您的任何意见/建议!

以下是在SCSS中实现这一目标的一个例子

@function color_luminance($color) {
    // Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js
    // Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
    $rgba: red($color), green($color), blue($color);
    $rgba2: ();

    @for $i from 1 through 3 {
        $rgb: nth($rgba, $i);
        $rgb: $rgb / 255;

        $rgb: if($rgb < .03928, $rgb / 12.92, pow(($rgb + .055) / 1.055, 2.4));

        $rgba2: append($rgba2, $rgb);
    }

    @return .2126 * nth($rgba2, 1) + .7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3);
}

0 个答案:

没有答案