假设我有一个清单:
$list: 0.67, 1.02, 1.2, 1.4, 1.8, 2
我也有 $x: 1.067
如何获得$list
最接近的值的索引$x
,我们称其为$y
?
我已经尝试了一些方法,但是没有一个是可靠的,并且很容易失败,具体取决于列表中的值:
@each $value in $list {
@if round($value * 10) == round($x * 10) {
$y: index($list, $value);
}
}
当然,这很糟糕,因为它只会匹配有点相似的第一个值$x
,而不匹配最接近的值,并且如果没有数字在的小数点后一位将失败$x
。
Sass有可能吗?
只需像这样遍历列表:
$list: 0.67, 1.02, 1.2, 1.4, 1.8, 2;
$x: 1.067;
$bestValue: 99999;
$bestIndex: -1;
@for $i from 1 through length($list) {
$value: abs($x - nth($list, $i));
@if $value < $bestValue {
$bestValue: $value;
$bestIndex: $i;
}
}
@error $bestIndex;
这是一种常见的模式,您可以定义“最佳索引”和“最佳值”(最初带有一些非常不好的数字),然后在列表中进行一次迭代。对于每个元素,请检查其值是否为“更好”。如果是这样,则更新值和索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句