我有一个像这样的数组:
var oArr = [
{ id: "d1", x: 2, y: 2 },
{ id: "d1", x: 3, y: 3 },
{ id: "d1", x: 5, y: 3 },
{ id: "d1", x: 5, y: 7 },
{ id: "d1", x: 3, y: 6 },
];
我想相互减去所有的y
属性,并测试它是否小于给定的阈值。
最后将项目分组为嵌套数组...
var threshold =2;
所以我的预期输出是:
var result= [
[ { id: "d1", x: 2, y: 2 },{ id: "d1", x: 3, y: 3 }, { id: "d1", x: 5, y: 3 }],
[ { id: "d1", x: 5, y: 7 }, { id: "d1", x: 3, y: 6 }]
];
任何建议或建议都将不胜感激。
答案 0 :(得分:1)
您可以缩小数组并检查增量是否不大于给定的threshold
。
此解决方案需要一个已排序的数组。
var array = [{ id: "d1", x: 2, y: 2 }, { id: "d1", x: 3, y: 3 }, { id: "d1", x: 5, y: 3 }, { id: "d1", x: 5, y: 7 }, { id: "d1", x: 3, y: 6 }],
threshold = 2,
result = array
.sort(({ y: a }, { y: b }) => a - b)
.reduce((r, o, i, a) => {
if (!i || o.y - a[i - 1].y > threshold) {
r.push([]);
}
r[r.length - 1].push(o);
return r;
}, []);
console.log(result);