如果你有一个点数组,如([[y,x]])
var result = [[0, 0, 2], [2, 3, 5]]
使用相同的Y对相邻点进行分组的最佳或可接受的方法是什么?这样你最终可能得到一个结果,如([[y,x1,x2]])
function generateSelectionDimensions (els) {
var groups = [];
var cur = null;
//may not be in order so we sort
els = els.sort(function(a,b) {
if( a[0] == b[0]) return a[1] - b[1];
return a[0] - b[0];
});
for (var i = 0; i < els.length; i++) {
var y = els[i][0];
var x = els[i][1];
if(!!els[i - 1]) {
var prevY = els[i - 1][0];
var prevX = els[i - 1][1];
}
var neighbor = !!els[i - 1] ? prevY === y
&& (prevX - x === 1 || x - prevX === 1) : false;
if(!neighbor) {
if(cur) groups.push(cur);
cur = {y: y, x1: x, x2: 0};
} else {
cur.x2 = x;
if(els.length - 1 === i) groups.push(cur);
}
}
return groups;
}
这是我的尝试:
{{1}}
答案 0 :(得分:1)
两个步骤:
var arr = [[2, 6], [0, 0], [0, 1], [0, 2], [2, 3], [2, 4], [2, 5], [0, 8], [0, 9]]
var res = [];
arr.sort(function (a, b) {
return a[0] - b[0] || a[1] - b[1];
}).forEach(function (a) {
if (res.length > 0) {
var last = res[res.length - 1];
if (last[0] === a[0] && last[2] === a[1] - 1) {
last[2]++;
return;
}
}
res.push([a[0], a[1], a[1]]);
});
document.write('<pre>'+JSON.stringify(res));
答案 1 :(得分:0)
我建议您使用与此类似的算法,它比您的尝试简单得多:
mspaint.exe
和另一个数组y values
的数组,这是出现的次数sizes
的数量)以及它们的大小(y values
中的值)sizes
添加到关联组中x value