代码之家  ›  专栏  ›  技术社区  ›  fareed Kevin

按最接近x的值对对象数组排序

  •  3
  • fareed Kevin  · 技术社区  · 6 年前

    我有一个对象数组,我想用最接近x的值对数组进行排序。

    例如,这是一个对象数组:

    [
     {"name" : "some 1", "value" : 12.4},
     {"name" : "some 2", "value": 11.4},
     {"name" : "some 3", "value": 10.5},
     {"name" : "some 4", "value": 11.4}
    ]
    

    我想按最近的分类 “价值” X .

    假设我要对数组进行排序,使属性“value”最接近11。所以新订单如下:

    [
      {"name" : "some 2", "value": 11.4},
      {"name" : "some 4", "value": 11.4},
      {"name" : "some 3", "value": 10.5},
      {"name" : "some 1", "value": 12.4}
     ]
    

    因为11.4最接近11,然后是10.5,然后是12.4。

    2 回复  |  直到 6 年前
        1
  •  6
  •   Nina Scholz    6 年前

    您可以按值和所需值的绝对增量排序。

    var array = [{ name: "some 1", value: 12.4 }, { name: "some 2", value: 11.4 }, { name: "some 3", value: 10.5 }, { name: "some 4", value: 11.4 }],
        value = 11;
     
    array.sort(({ value: a }, { value: b }) => Math.abs(a - value) - Math.abs(b - value));
    
    console.log(array);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        2
  •  3
  •   ibrahim mahrir    6 年前

    您可以使用距离(差的绝对值 value - x )要按如下方式对数组排序:

    arr.sort((a, b) => Math.abs(a.value - x) - Math.abs(b.value - x));