Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнить объект с undefined (https://javascript.ru/forum/misc/83348-sravnit-obekt-s-undefined.html)

spavels 20.11.2021 11:33

Сравнить объект с undefined
 
Здравствуйте! Подскажите, пожалуйста. Нужно определить, есть ли поле в элементе массива, и если его нет, то удалить этот элемент из массива объектов. Пытаюсь так - не выходит. Ругается так: Cannot read properties of undefined (reading 'groupld')

const students = [
	{ id: 1, fullName: "Иванов Сергей", age: 18, groupld: 3 },
	{ id: 2, fullName: "Фролова Василиса", age: 17, groupld: 3 },
	{ id: 3, fullName: "Курочкина Диана", age: 18, groupld: 5 },
	{ id: 4, fullName: "Кравцов Алексей", age: 19, groupld: 4 },
	{ id: 5, fullName: "Краснова Елизавета", age: 19, groupld: 3 },
	{ id: 6, fullName: "Королев Александр", age: 19 },
	{ id: 7, fullName: "Игнатьев Влад", age: 20, groupld: 2 },
	{ id: 8, fullName: "Сергеев Михаил", age: 18, groupld: 1 },
	{ id: 9, fullName: "Зайцев Виталий", age: 18, groupld: 1 },
	{ id: 10, fullName: "Курочкина Евгения", age: 18, groupld: 3 },
	{ id: 11, fullName: "Васильев Александр", age: 19, groupld: 4 }
];

function foo(arr1) {
	let copyStudents = JSON.parse(JSON.stringify(arr1));
	let a = Object.keys(copyStudents).length;

	for ( let i = 0; i <= a; i++ ) {
		if ( typeof copyStudents[i].groupld === undefined ) {
			delete copyStudents[i];
		}
	}

foo(students);

рони 20.11.2021 12:07

spavels,
не бывает элементов равных length!!! строка 19
читать про метод splice (строка 21)и оператор in(строка 20)

spavels 20.11.2021 12:25

спасибо, почитаю - исправлю. Но, все же, если проверю alert(a), то выдает именно то, что мне и нужно - цифру равную количеству элементов в массиве. На этом этапе мне это и нужно. Вот как проверить поле на undefined так и не понял.

voraa 20.11.2021 12:33

Цитата:

Сообщение от spavels
Но, все же, если проверю alert(a), то выдает именно то, что мне и нужно - цифру равную количеству элементов в массиве

Посчитайте пальцы на руке, начиная с 0. Получится 4 или 5?
Цитата:

Сообщение от spavels
Вот как проверить поле на undefined так и не понял.

Сложный вопрос. Смотря, что нужно. Нет такого свойтва или оно может быть, но может быть равно undefined.
let o = (x:undefined}
o.x === undefined  // true
o.y === undefined // true
'x' in o // true
'y' in o // false

spavels 20.11.2021 12:45

Я понимаю, что с нуля считается. Но посчитайте сколько элементов у меня в массиве и запустите мой код с alert(a). Элементов 11 в массиве и а = 11. Мне ведь это и нужно. Или Object.keys считывает дополнительно что-то еще?

spavels 20.11.2021 12:47

А.. у меня i начинает цикл с нуля )

voraa 20.11.2021 12:49

const a = [1,2,3,4,5]

a.length == 5
a[0] === 1
a[1] === 2
a[2] === 3
a[3] === 4
a[4] === 5
a[5] === undefined

Что непонятно?

spavels 20.11.2021 14:50

Убрал цикл. Нашел такое решение с методом filter():
const students = [
	{ id: 1, fullName: "Иванов Сергей", age: 18, groupld: 3 },
	{ id: 2, fullName: "Фролова Василиса", age: 17, groupld: 3 },
	{ id: 3, fullName: "Курочкина Диана", age: 18, groupld: 5 },
	{ id: 4, fullName: "Кравцов Алексей", age: 19, groupld: 4 },
	{ id: 5, fullName: "Краснова Елизавета", age: 19, groupld: 3 },
	{ id: 6, fullName: "Королев Александр", age: 19 },
	{ id: 7, fullName: "Игнатьев Влад", age: 20, groupld: 2 },
	{ id: 8, fullName: "Сергеев Михаил", age: 18, groupld: 1 },
	{ id: 9, fullName: "Зайцев Виталий", age: 18, groupld: 1 },
	{ id: 10, fullName: "Курочкина Евгения", age: 18, groupld: 3 },
	{ id: 11, fullName: "Васильев Александр", age: 19, groupld: 4 }
];

function foo(arr1) {
        
        console.log(arr1);

	let copyStudents = arr1.filter((item) => item.groupld !== undefined);

	console.log(copyStudents);
}

foo(students);


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