Отфильтровать уникальные значения, которых нет в массиве и занести их туда

Есть массив с цифрами, есть функция в которую передается строчка с цифрами, нужно отфильтровать уникальные значения, которых нет в первом массиве и занести их туда.

Саму функцию я ее сделал, но хотелось бы задать вопрос касательно моего кода: есть ли возможность обойтись без цикла for, используя только методы массива?

Как-то можно реализовать эту задачу в одну краткую строку?

Заранее спасибо за ответ

    let a = ["1", "4", "6"];
    
    let b = (str) => {
        let c = str.split('').filter(item => !a.includes(item))
    
        for(let d of c) {
            a.push(d)
        }
    }
    
    b("146987")
    
    console.log(a)


Ответы (4 шт):

Автор решения: Aziz Umarov

Можно так, за один проход. Добавить не достающие элементы (не изменяя исходный массив, уникальность элементов в котором не требовалось по условию задачи)

let a = ["1", "4", "4", "6"];
    
"146987".split('').reduce((acc, item) => { if (!acc.unique.has(item)) { acc.unique.add(item); acc.result.push(item); } return  acc }, { unique: new Set(a), result: a});
    
console.log(a)

После беседы с Grundy переписал Array.includes на Set.has

→ Ссылка
Автор решения: Skywave

Можно сначала объединить, а потом фильтровать по уникальности

let a = ["1", "4", "6"];

let c = (str) => {
    a = a.concat(str.split('')).filter((v, i, arr) => arr.indexOf(v) === i);
}

c("146987");

console.log(a);

Сравнение

let a = ["1", "4", "6"];
let aa = ["1", "4", "6"];
    
let b = (str) => {
  let c = str.split('').filter(item => !a.includes(item))

  for(let d of c) {
    a.push(d)
  }
}

let c = (str) => {
    aa = aa.concat(str.split('')).filter((v, i, arr) => arr.indexOf(v) === i);
}

b("146987");
c("146987");

console.log('b', a)
console.log('c', aa);

→ Ссылка
Автор решения: Дядя Вова

let a = ["1", "4", "6"];
const log = console.log
let func = (str, arr) => [...new Set(str.split("").concat(arr))]

let b = func("146987", a)
let c = func("3", a)
let d = func("32432", a)

console.log(b, c, d)

Тоже поигрался маленько)

→ Ссылка
Автор решения: Vasily

Можно сделать так:

const array = ["1", "4", "6"]
const string = "146987"

string.split("").forEach(item => { !array.includes(item) && array.push(item) })

console.log(array)
// [ "1", "4", "6", "9", "8", "7" ]
   

→ Ссылка