javascript 根据与给定数字的接近程度对数组中的元素进行排序

v1uwarro  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(104)

我有一个这样的对象数组:

var objects = [
  {id: "obj1",
   feat: [{
    id: "heal",
    value: 125
   }]
  }, 
  {id: "obj2",
   feat: [{
    id: "heal",
    value: 350
   }]
  }, 
  {id: "obj3",
   feat: [{
    id: "heal",
    value: 500
   }]
  }, 
  {id: "obj4",
   feat: [{
    id: "heal",
    value: 1000
   }]
  }
]

var numberdifference = 498;

我想排序的对象是顶部的对象,其值更接近numberdifference

var sorteditems = objects.sort((a, b) => {   
     if(a.id.match('heal') && b.id.match('heal')) {
      let diff1 = bothpdiff-a.feat[0].value;
      let diff2 = bothpdiff-b.feat[0].value;
       
      return diff1 - diff2;
    });
    
    console.log(sorteditems);

但是我不能让它工作。在这个例子中,obj3应该在上面,后面跟着obj2。

bvn4nwqk

bvn4nwqk1#

使用Math.abs()测量距离:

var sorteditems = objects.sort((a, b) => {   
      let diff1 = Math.abs(numbereddifference-a.feat[0].value);
      let diff2 = Math.abs(numbereddifference-b.feat[0].value);
       
      return diff1 - diff2;
    });
    
    console.log(sorteditems)

同时删除带有'heal'的条件,因为它是错误的(流永远不会到达那里)。最好使用filter来删除所有没有'heal'作为id的元素

vmdwslir

vmdwslir2#

不清楚你想用a.id.match('heal')做什么,但我会指出a.id"obj1",而不是"heal"
您可以通过减去要比较的项目的valuenumberdifference之间的绝对差值来对它们进行排序。

var objects = [
  {id: "obj1",
   feat: [{
    id: "heal",
    value: 125
   }]
  }, 
  {id: "obj2",
   feat: [{
    id: "heal",
    value: 350
   }]
  }, 
  {id: "obj3",
   feat: [{
    id: "heal",
    value: 500
   }]
  }, 
  {id: "obj4",
   feat: [{
    id: "heal",
    value: 1000
   }]
  }
]

var numberdifference = 498;

const sorted = objects.sort(({feat: a}, {feat: b}) => {
  return Math.abs(numberdifference - a[0].value) - Math.abs(numberdifference - b[0].value);
})

console.log(sorted); // 500, 350, 125, 1000

相关问题