Есть некий скрипт сбора координат вида [2,1] в массив. Координаты могут повторяться, но итоговый массив должен содержать только уникальные координаты.
Я делаю следующим образом:
let arr = [];
for(...){
//Собираем координаты в строковом виде, чтобы сразу отбросить повторяющиеся
let str = [i, j].join();
!arr.includes(str) && arr.push(str)
}
//Приводим координаты к первоначальному формату
arr = arr.map(str => {
let coords = str.split(',');
return [parseInt(coords[0]), parseInt(coords[1])];
});
Подскажите пожалуйста, есть ли более элегантный способ? Без приведения к строке и тд?
const a = [1,2];
const b = [3,4];
const c = [5,6];
const d = [3,4];
const arr = [a,b,c,d]
const obj = {}
arr.forEach(item => {
obj[item] = item
});
const result = Object.values(obj);
console.log(result)
С помощью reduce, как советовал @Grundy
const a = [1,2];
const b = [3,4];
const c = [5,6];
const d = [3,4];
const arr = [a,b,c,d]
let result = arr.reduce((prev, curr) => {
obj[curr] = curr;
}, obj={});
result = Object.values(obj);
console.log(result)
var map = new Map;
map.set( [ 1, 2 ].join(), [ 1, 2 ] );
map.set( [ 1, 2 ].join(), [ 1, 2 ] );
map.set( [ 1, 3 ].join(), [ 1, 3 ] );
map.set( [ 1, 3 ].join(), [ 1, 3 ] );
map.set( [ 1, 5 ].join(), [ 1, 5 ] );
var arr = [ ];
map.forEach( v => arr.push( v ) );
console.log( arr );
PS: Вариант 2. а лучше наверное вообще так
var input = [
[ 1, 2 ],
[ 1, 2 ],
[ 1, 3 ],
[ 1, 3 ],
[ 1, 5 ]
];
var set = new Set;
var arr = [ ], j;
input.forEach( v => {
set.has( ( j = v.join() ) ) || ( set.add( j ), arr.push( v ) );
} );
console.log( arr );
Продвижение своими сайтами как стратегия роста и независимости