Отфильтровать уникальные значения, которых нет в массиве и занести их туда
Есть массив с цифрами, есть функция в которую передается строчка с цифрами, нужно отфильтровать уникальные значения, которых нет в первом массиве и занести их туда.
Саму функцию я ее сделал, но хотелось бы задать вопрос касательно моего кода: есть ли возможность обойтись без цикла 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 шт):
Можно так, за один проход. Добавить не достающие элементы (не изменяя исходный массив, уникальность элементов в котором не требовалось по условию задачи)
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
Можно сначала объединить, а потом фильтровать по уникальности
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)
Тоже поигрался маленько)
Можно сделать так:
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" ]