20

Как объединить два массива в JavaScript и удалить дубликаты?

18

Я имею две массива JavaScript:

var array1 = ["Vijendra", "Singh"];
var array2 = ["Singh", "Shakya"];

Мне нужно получить следующий вывод:

var array3 = ["Vijendra", "Singh", "Shakya"];

Массив на выходе должен содержать уникальные элементы без повторений.

Как мне объединить два массива в JavaScript так, чтобы в результате остались только уникальные элементы в том порядке, в котором они были вставлены в оригинальные массивы?

5 ответ(ов)

6

С помощью Underscore.js или Lo-Dash вы можете выполнить объединение массивов, используя метод _.union. Вот пример кода:

console.log(_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]));

Это выведет объединение уникальных значений из указанных массивов.

Для использования библиотеки Lo-Dash в вашем проекте, добавьте следующий скрипт в HTML-файл:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

Дополнительные сведения о методе union вы можете найти в документации:

Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!

4

Если вы хотите объединить два массива array1 и array2, при этом не удаляя дубликаты, это можно сделать с помощью операторов расширения (spread operator):

const result = [...array1, ...array2]; // => дубликаты не удаляются

Если же вы хотите объединить два массива и одновременно удалить дубликаты, вы можете использовать Set следующим образом:

const result = [...new Set([...array1, ...array2])]; // => дубликаты удаляются

Таким образом, в первом случае вы просто объединяете массивы, а во втором — убираете повторяющиеся элементы.

4

Чтобы объединить два массива и оставить только уникальные элементы, сначала необходимо объединить массивы, а затем отфильтровать уникальные значения:

var a = [1, 2, 3], b = [101, 2, 1, 10];
var c = a.concat(b);
var d = c.filter((item, pos) => c.indexOf(item) === pos);

console.log(d); // d будет [1, 2, 3, 101, 10]

Редактирование

Как было предложено, более производительным решением будет отфильтровать уникальные элементы в массиве b, прежде чем объединять его с a:

var a = [1, 2, 3], b = [101, 2, 1, 10];
var c = a.concat(b.filter((item) => a.indexOf(item) < 0));

console.log(c); // c будет [1, 2, 3, 101, 10]

Таким образом, мы сначала отбираем только те элементы из массива b, которые не присутствуют в массиве a, и затем объединяем их. Это позволяет избежать дублирования и улучшает производительность.

0

В ES6 предложено однострочное решение для объединения нескольких массивов без дубликатов, используя деструктуризацию и Set.

Вот пример кода:

const array1 = ['a','b','c'];
const array2 = ['c','c','d','e'];
const array3 = [...new Set([...array1,...array2])];
console.log(array3); // ["a", "b", "c", "d", "e"]

В этом примере мы сначала объединяем массивы array1 и array2 с помощью оператора расширения (...). Затем создаем экземпляр Set, который автоматически удаляет дубликаты. Наконец, мы снова используем оператор расширения для преобразования Set обратно в массив. Таким образом, в результате мы получаем массив без дубликатов.

0

Я понимаю, что этот вопрос не касается массива объектов, но поисковые системы всё равно могут привести сюда.

Поэтому стоит добавить для будущих читателей правильный способ на ES6 для слияния массивов и удаления дубликатов.

Массив объектов:

var arr1 = [ {a: 1}, {a: 2}, {a: 3} ];
var arr2 = [ {a: 1}, {a: 2}, {a: 4} ];

var arr3 = arr1.concat(arr2.filter( ({a}) => !arr1.find(f => f.a === a)));

// [ {a: 1}, {a: 2}, {a: 3}, {a: 4} ]

В данном примере мы сначала используем filter для второго массива, чтобы оставить только те объекты, которые отсутствуют в первом массиве. Затем с помощью concat соединяем оба массива, что позволяет получить новый массив без дубликатов.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь