У меня есть ответ, почему map
не работает, но я не совсем уверен, почему mergeMap
работает.Объект, возвращаемый из response.json()
, является любым списком.Таким образом, filter
должен обрабатывать полный список.Не отдельные элементы списка.В списке нет свойства id
, поэтому ничего не найдено.Даже если параметр в filter
называется file
, он должен быть files
.Я считаю, что с картой будет работать следующее:
this.http.get("json-url")
.map((response) => response.json())
.filter((files) => files.filter((file)->file.id === 1));
Однако вы получите список обратно.Если вам действительно нужен один файл, вы можете добавить в другую карту:
this.http.get("json-url")
.map((response) => response.json())
.filter((files) => files.filter((file)->file.id === 1))
.map(files=> files[0]);
С учетом всего вышесказанного, я думаю, что сработала mergeMap
, возможно, какая-то более старая разновидность rxjs.Мое непроверенное предположение состоит в том, что список, возвращаемый анонимной функцией, преобразуется в наблюдаемую mergeMap
.Это кажется немного подозрительным, но возможно.Более старый API rxjs, казалось, пытался заставить вещи работать, даже если это, вероятно, не должно.