isMatch
Coincidencia parcial profunda: ¿contiene target todo lo que describe pattern?
Lección
isMatch recorre pattern de forma recursiva y comprueba
que target lo «contiene», con reglas distintas según la forma:
Los Map coinciden parcialmente: cada clave de pattern
debe existir en target con un valor que coincida recursivamente, pero
target puede tener claves de más que el patrón
no menciona. Las listas/iterables se comparan por pares desde
el principio, y aquí está el detalle que conviene recordar: el patrón solo
tiene que ser un prefijo del target. [1, 2, 3]
coincide con el patrón [1, 2], pero no con el patrón
[1, 2, 3, 4] — el patrón no puede ser más largo que el target.
Cualquier otra cosa (números, cadenas, booleanos, …) se compara con un
== normal.
Como las reglas anidan, la coincidencia profunda te sale casi gratis: un
patrón como {'address': {'city': 'seoul'}} coincide con un map
de usuario con un valor address mucho más grande y anidado,
siempre que city sea 'seoul' en algún punto dentro de él.
Demo 1 · Coincidencia de Map
Demo 2 · Coincidencia por prefijo en listas, y filtrar con ella
Pruébalo tú
Ejercicio: usa isMatch para comprobar si order coincide con {'status': 'shipped'}.