Удалить из массива А числа, которые есть в полях объекта В
Все привет, подскажите, как сделать следующе. Есть:
let period = { id: Math.floor(Math.random() * 1000000), date: new Date().toISOString(), unit: {1: {a: '', c: [16,9,3,11,30], p: ''}, 2: {a: '', c: [5,12,8,21,33], p: ''}, 3: {a: '', c: [6,13,10,22,34], p: ''}} }; let num = [16,9,3,11,30, 5,12,8,21,33, 6,13,10,22,34,8,69,25,47,72,18]; function checkPeriod(){ // Здесь нужно получить все числа из всех объектов unit.c // и удалить их из массива num } В функции checkPeriod() нужно проверить все числа, которые есть во всех массивах unit.c и удалить эти числа из массива num |
уникальные элементы массива
Volonter,
:-? let period = { id: Math.floor(Math.random() * 1000000), date: new Date().toISOString(), unit: { 1: { a: '', c: [16, 9, 3, 11, 30], p: '' }, 2: { a: '', c: [5, 12, 8, 21, 33], p: '' }, 3: { a: '', c: [6, 13, 10, 22, 34], p: '' } } }; let num = [16, 9, 3, 11, 30, 5, 12, 8, 21, 33, 6, 13, 10, 22, 34, 8, 69, 25, 47, 72, 18]; function checkPeriod(num, { unit }) { let all = []; for (let i in unit) { all.push(...unit[i].c) }; for (let i = num.length - 1; i ; i--) {all.includes(num[i]) && num.splice(i, 1)} return num } console.log(checkPeriod(num, period)) //[ 69, 25, 47, 72, 18]; |
Предложу такой вариант...
let period = { id: Math.floor(Math.random() * 1000000), date: new Date().toISOString(), unit: { 1: {a: '', c: [16,9,3,11,30], p: ''}, 2: {a: '', c: [5,12,8,21,33], p: ''}, 3: {a: '', c: [6,13,10,22,34], p: ''} } }; let num = [16,9,3,11,30, 5,12,8,21,33, 6,13,10,22,34,8,69,25,47,72,18]; function checkPeriod(){ const s = new Set(Object.values(period.unit).flatMap(o => o.c)) let i = 0 num.forEach((v, _, a) => !s.has(v) ? a[i++] = v : 0) num.length = i } checkPeriod() alert(num) |
рони, ksa
Спасибо!!! Оба варианта нравятся)) |
Цитата:
Не знал что их можно совмещать с обычными, в доке нет этого |
|
Часовой пояс GMT +3, время: 10:04. |