Первый вопрос - у меня замечательно отрабатывает
.length
в вашем примере. У вас, скорее всего, консольлог с length вызывается раньше цикла.
Второй вопрос - использовать оператор ИЛИ
||
в своем переборе, где Вы пушите результат, почему нет?
const arr = [{test1: 1, test2: 2}, {test1: 1}, {test1: 1, test2: 2}];
arr.forEach(function(item, i, arr) {
console.log('Test1: ' + (item.test1 || 'Empty'));
console.log('Test2: ' + (item.test2 || 'Empty'));
});
//Test1: 1
//Test2: 2
//Test1: 1
//Test2: Empty
//Test1: 1
//Test2: 2