Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить из массива А числа, которые есть в полях объекта В (https://javascript.ru/forum/misc/86369-udalit-iz-massiva-chisla-kotorye-est-v-polyakh-obekta-v.html)

Volonter 28.03.2025 17:30

Удалить из массива А числа, которые есть в полях объекта В
 
Все привет, подскажите, как сделать следующе. Есть:
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

рони 28.03.2025 19:03

уникальные элементы массива
 
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];

ksa 29.03.2025 16:57

Предложу такой вариант...

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)

Volonter 30.03.2025 13:19

рони, ksa
Спасибо!!!
Оба варианта нравятся))

micscr 31.03.2025 09:47

Цитата:

Сообщение от рони (Сообщение 557166)
function checkPeriod(num, { unit }) {

А вот это - { unit } - это что?, умные параметры?
Не знал что их можно совмещать с обычными, в доке нет этого

рони 31.03.2025 11:29

micscr,
Получение полей объекта-параметра функции


Часовой пояс GMT +3, время: 10:04.