Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2021, 11:33
Новичок на форуме
Отправить личное сообщение для spavels Посмотреть профиль Найти все сообщения от spavels
 
Регистрация: 20.11.2021
Сообщений: 5

Сравнить объект с 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);
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2021, 12:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,135

spavels,
не бывает элементов равных length!!! строка 19
читать про метод splice (строка 21)и оператор in(строка 20)
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2021, 12:25
Новичок на форуме
Отправить личное сообщение для spavels Посмотреть профиль Найти все сообщения от spavels
 
Регистрация: 20.11.2021
Сообщений: 5

спасибо, почитаю - исправлю. Но, все же, если проверю alert(a), то выдает именно то, что мне и нужно - цифру равную количеству элементов в массиве. На этом этапе мне это и нужно. Вот как проверить поле на undefined так и не понял.
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2021, 12:33
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,756

Сообщение от 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
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2021, 12:45
Новичок на форуме
Отправить личное сообщение для spavels Посмотреть профиль Найти все сообщения от spavels
 
Регистрация: 20.11.2021
Сообщений: 5

Я понимаю, что с нуля считается. Но посчитайте сколько элементов у меня в массиве и запустите мой код с alert(a). Элементов 11 в массиве и а = 11. Мне ведь это и нужно. Или Object.keys считывает дополнительно что-то еще?
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2021, 12:47
Новичок на форуме
Отправить личное сообщение для spavels Посмотреть профиль Найти все сообщения от spavels
 
Регистрация: 20.11.2021
Сообщений: 5

А.. у меня i начинает цикл с нуля )
Ответить с цитированием
  #7 (permalink)  
Старый 20.11.2021, 12:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,756

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

Что непонятно?
Ответить с цитированием
  #8 (permalink)  
Старый 20.11.2021, 14:50
Новичок на форуме
Отправить личное сообщение для spavels Посмотреть профиль Найти все сообщения от spavels
 
Регистрация: 20.11.2021
Сообщений: 5

Убрал цикл. Нашел такое решение с методом 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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что за объект chrome? Maxxxim Общие вопросы Javascript 3 03.08.2019 13:09
чистка массива от undefined со смещением Evelate Элементы интерфейса 4 20.07.2017 15:23
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
Передать ссылку на объект а не объект возникновения события Blazze Events/DOM/Window 0 11.10.2011 00:45
Чем отличается undefined от null hrundel Общие вопросы Javascript 21 01.01.2011 22:06