Если проверяется одно свойство:
const key = 'имя какого-то свойства';
const checkItem = n => n[key] != null;
// собираем новый массив
const newArr = arr.filter(checkItem);
// обновляем существующий
for (let i = 0; i < arr.length; i++) {
if (!checkItem(arr[i])) {
for (let j = i--; ++j < arr.length; arr[j - 1] = arr[j]) ;
arr.pop();
}
}
Несколько свойств:
const keys = [ 'имя какого-то свойства', 'ещё одно', 'и ещё' ];
const checkItem = n => keys.every(k => n[k] != null);
// собираем новый массив
const newArr = [];
for (const n of arr) {
if (checkItem(n)) {
newArr.push(n);
}
}
// обновляем существующий
arr.splice(0, arr.length, ...arr.filter(checkItem));
Все свойства:
const checkItem = n => !Object.values(n).some(v => v == null);
// собираем новый массив
const newArr = (function get(i, n = arr[--i]) {
return i >= 0
? get(i).concat(checkItem(n) ? n : [])
: [];
})(arr.length);
// обновляем существующий
arr.length -= arr.reduce((acc, n, i, a) => (
a[i - acc] = n,
acc + !checkItem(n)
), 0);