我有一个这样的对象数组:
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。
2条答案
按热度按时间bvn4nwqk1#
使用
Math.abs()
测量距离:同时删除带有'heal'的条件,因为它是错误的(流永远不会到达那里)。最好使用filter来删除所有没有'heal'作为id的元素
vmdwslir2#
不清楚你想用
a.id.match('heal')
做什么,但我会指出a.id
是"obj1"
,而不是"heal"
。您可以通过减去要比较的项目的
value
和numberdifference
之间的绝对差值来对它们进行排序。