Я использую этот метод для поиска объекта в массиве:
lat arr = [];
found = this.obj[objKey].filter(item => item[internKeyName] == 7047);
arr.push(found);
Проблема в том, что если элемент не был найден, он добавил его как undefined в массив arr. Как этого избежать?
Почему не находит элемент с ключом: "subjectId":
let objKey = 7047;
let k = "subjectId";
let v = 7047;
found = this.obj[objKey].filter(item => item[k] == v);
console.info(found);// undefined
Надеюсь, вы нашли правильный ответ, но, честно говоря, имейте в виду, что нам нужен полный пример для вопросов по коду. Пример должен быть действительно работоспособным, где это возможно, и активно демонстрировать проблему, с которой вы столкнулись.
что не работает с реальным кодом? Вы проверили, что у вас есть массив для фильтрации?
Я использую неправильную функцию, вместо этого нахожу, что использую фильтр, это ошибка
filter может быть полезен для поиска более чем одного объекта по заданному условию.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Этого можно избежать, проверив длину found перед тем, как поместить ее в массив.
lat arr = [];
found = this.obj[objKey].filter(item => item[internKeyName] == 7047);
found.length > 0 && arr.push(...found);
Я использую синтаксис распространения, чтобы протолкнуть каждый элемент как отдельный элемент в новый массив, и я предполагаю, что это то, что вы хотите. Вы можете удалить ..., если хотите, чтобы все найденные элементы были его собственным элементом массива.
found всегда есть true.
Ой, я видел, что это x.find
Почему вы используете ...found?
Это называется Spread Syntax, он в основном принимает массив и передает их как отдельные параметры. Подробнее об этом можно прочитать здесь: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Функция filter не вернет undefined, вместо этого вернет пустой массив (если ни один элемент не удовлетворял условию).
Problem is that if element was not found it added this as
undefinedto arrayarr.
Вероятно, вы захотите найти определенный элемент, поэтому я рекомендую вам использовать функцию find, если вам нужен только один объект, а не массив с одним индексом.
lat arr = [];
found = this.obj[objKey].find(item => item[internKeyName] == 7047);
if (found) arr.push(found);
@dooglu, можете ли вы опубликовать Минимальный, полный и проверяемый пример или хотя бы дополнительную информацию о контексте this? Я имею в виду, в основном больше кода.
Вы можете напрямую протолкнуть расширенный массив с нужными объектами, пустые массивы не распространяются (синтаксис распространения ...).
arr.push(...this.obj[objKey].filter(item => item[internKeyName] == 7047));
что должен делать фильтр? где определяется
internKeyNameи почему это значение жестко запрограммировано?