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

时间:2017-01-15 20:37:33

标签: 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);
    }
}

当然这很糟糕,因为它只匹配与$x有些相似的第一个值,而不是最接近的值,如果没有数字在1以内则会失败$x的小数位。

Sass可以实现吗?

2 个答案:

答案 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,并按减法的绝对结果进行排序。