2015-04-13 6 views
0

Все:Быстрый способ объединить точки в перекрываются в таком же положении

Пусть у меня есть тонны точек (х, у), может кто-нибудь показать мне быстрый способ (простой алгоритм предпочтительного), чтобы удалить дублированные точки значения позиции в Javascript?

О чем я могу думать: сортировать их по x и сравнивать один за другим.

+0

Возможный дубликат [Уникальные значения в массиве] (http://stackoverflow.com/questions/1960473/unique-values-in-an-array) – orlp

+0

@orlp благодарит за информацию. Мой случай немного (только немного) другой, это 2d значение, вы могли бы показать мне, как выбрать ключ? – Kuan

ответ

1

Что вы, кажется, ищете, это своего рода HashSet для Javascript. Удобно достаточно для наших целей, Javascript Objects ведет себя достаточно так, чтобы делать то, что вы хотите в очень простом способе:

// Assuming points is an array of objects that look like {x:i, y:i} 
var uniquePoints = {}; 
for (var i = 0; len = points.length; i < len; i++) { 
    var point = points[i]; 
    uniquePoint[point.x + '_' + point.y] = point; 
} 

В конце цикла for, вы будете иметь объект, содержащий все уникальные точки.

+0

Спасибо за помощь, я думаю, что моя главная проблема - решить, что использовать в качестве ключа, потому что я не уверен, что значение участвует в конкатенации строк точно так же, как и значение, используемое для вычисления. Например: возможно ли, что одна точка - это [3.14159263489574936 ... (предположим, что она очень длинная), 5.3498375498534 ...], а другой момент очень близок к ней. при объединении их как строки, их результаты будут «3.1415926348957493_5.3498375498534», но на самом деле мне нужно сохранить обе точки? – Kuan

+0

В зависимости от требований вашего приложения к точности, я бы рекомендовал использовать функцию 'toFixed (precision)', которая возвращает строку с требуемой точностью. Однако, насколько я могу судить, 'toString()' Javascript на номере не теряет точности. – xathien

+0

Спасибо, я использую это в своем коде, и это кажется работой! – Kuan

 Смежные вопросы

  • Нет связанных вопросов^_^