我们说我有一个清单:
$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
有些相似的第一个值,而不是最接近的值,如果没有数字在1以内则会失败$x
的小数位。
Sass可以实现吗?
答案 0 :(得分:1)
只需按照以下方式迭代列表:
$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;
这是一种常见的模式,你定义一个“最佳索引”和“最佳值”(最初有一些非常糟糕的数字),然后在列表上迭代一次。对于每个元素,检查其值是否“更好”。如果是,则更新您的值和索引。
答案 1 :(得分:0)
您可以从每个值中减去x,并按减法的绝对结果进行排序。