Sass 如何获取列表中最接近x的值的索引?

Sass 如何获取列表中最接近x的值的索引?,sass,Sass,假设我有一个列表: $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); } } 当然,这很糟糕,因

假设我有一个列表:

$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
的小数点后1位以内,则将失败


这在Sass中是可能的吗?

您可以从每个值中减去x,然后按减法的绝对结果排序

只需在列表上重复一次,如下所示:

$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;
$list:0.67,1.02,1.2,1.4,1.8,2;
$x:1.067;
$bestValue:99999;
$bestIndex:-1;
@对于从1到长度的$i($list){
$value:abs($x-n($list,$i));
@如果$value<$bestValue{
$bestValue:$value;
$bestIndex:$i;
}
}
@错误$bestIndex;

这是一种常见的模式,您定义“最佳索引”和“最佳值”(最初使用一些非常糟糕的数字),然后在列表上迭代一次。对于每个元素,检查其值是否为“更好”。如果是这样,您将更新您的值和索引。

谢谢,这似乎确实有效。我真的不明白发生了什么事,你介意快速解释一下吗?