Массив уникальных массивов. JavaScript

170
20 декабря 2019, 17:20

Есть некий скрипт сбора координат вида [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])];
});

Подскажите пожалуйста, есть ли более элегантный способ? Без приведения к строке и тд?

Answer 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)

Answer 2

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 );

READ ALSO
vue js Поиск внутри массива

vue js Поиск внутри массива

Есть массив объектов:

211
Slick slider плавная прокрутка

Slick slider плавная прокрутка

Есть слайдер с 4-мя картинками, когда мышкой хочешь листать например прокрутил на 3 картинки вперед, все равно прокручивается только на один,...

648
Как получить все заголовки на странице h1?

Как получить все заголовки на странице h1?

Мне нужно вывести в файл все заголовки со страницы

204
Как получить содержимое файла с другого сайта?

Как получить содержимое файла с другого сайта?

Такая проблема: Я написал userscript для сайтаВ нём мне необходимо получить из другого сайта содержимое файла "https://сайт/answ

206