Javascript 比较对象数组中的项

Javascript 比较对象数组中的项,javascript,arrays,object,compare,Javascript,Arrays,Object,Compare,假设我有一个对象数组: var array = [ { id: 1, pt: 0 }, { id: 2, pt: 12 }, { id: 3, pt: 7 }, { id: 4, pt: 45 }, { id: 5, pt: 123 }, ]; 我想遍历数组(使用类似于array.forEach或array.map,并将每个项目中的pt属性与数组中其他项目的属性进行比较。我的目标是,对于每个项目,找到与该项目pt值最接近的3个其他项目。例如,id:1va中最

假设我有一个对象数组:

 var array = [ 
   { id: 1, pt: 0 },
   { id: 2, pt: 12 },
   { id: 3, pt: 7 },
   { id: 4, pt: 45 },
   { id: 5, pt: 123 },
 ];

我想遍历数组(使用类似于
array.forEach
array.map
,并将每个项目中的
pt
属性与数组中其他项目的属性进行比较。我的目标是,对于每个项目,找到与该项目
pt
值最接近的3个其他项目。例如,
id:1
va中最接近的项目lue是2、3和4。对于
id:3
它将是1、2和4,等等。我如何实现这一点?

您需要映射过滤结果以排除枢轴元素,并按绝对增量排序,并将所需数量作为结果

函数最近(n,{id,pt}){
返回数组
.filter(o=>o.id!==id)
.sort((a,b)=>Math.abs(a.pt-pt)-Math.abs(b.pt-pt))
.切片(0,n);
}
var数组=[{id:1,pt:0},{id:2,pt:12},{id:3,pt:7},{id:4,pt:45},{id:5,pt:123}],
result=array.map(o=>Object.assign({},o,{最近的:最近的(3,o)}));
console.log(结果);

.as控制台包装{max height:100%!important;top:0;}
首先让我们对数组进行排序:

array.sort((a, b) => a.pt - b.pt);
现在,最近的元素位于元素的正前方或正后方。要获取它们,可以向前或向后移动:

function getClosest(pos, n) {
  let lower = pos - 1, upper = pos + 1;
  const distance = i => Math.abs(array[pos].pt - array[i].pt);
  const result = [];
  while(result.length < n) {
    if(lower >= 0 && distance(lower) < distance(upper)) {
       result.push(array[lower--]);
    } else if(upper < array.length) {
       result.push(array[upper++]);
    } else break;
  }
 return result;
}

你试过什么了吗?编辑你想从你的例子中看到的结果。在视觉上真的很有帮助。有多少项?(大致)按
pt
排序,然后向前看和向后看。
getClosest(0, 5)