Faits : A. B._, née en 1976, a bénéficié de prestations de l'assurance-chômage. En février 2013, elle a été engagée par la société A._ SA en qualité de "responsable développement marketing et communication" à compter du 5 mars suivant. Les parties au contrat de travail ont déposé une demande d'allocations de retour en emploi (ARE) auprès de l'Office cantonal de l'emploi de la République et canton de Genève (ci-après: l'OCE). Selon le formulaire de demande, signé par l'employeur, celui-ci "s'engage à conclure avec l'employée un contrat de travail à durée indéterminée [...]. A l'issue de la période d'essai, le contrat de travail ne peut être résilié pendant la période de l'ARE ou dans les 3 mois suivants que sur présentation de justes motifs au sens de l'art. 337 CO". Par décision du 11 mars 2013, l'OCE a accepté la demande et indiqué notamment que les allocations seraient versées pour une durée allant du 5 mars 2013 au 4 mars 2014. Par lettre du 7 novembre 2013, A._ SA a résilié les rapports de travail la liant à B._, avec effet au 4 mars 2014. En réponse à un courrier de l'OCE, la société a précisé par lettre du 30 avril 2014 que le licenciement était uniquement motivé par des raisons économiques et que l'échéance avait été fixée au 4 mars 2014 "afin de respecter le délai de l'ARE". Par décision du 17 juin 2014, confirmée sur opposition le 12 septembre suivant, l'OCE a demandé à l'employeur le remboursement de la totalité des allocations perçues, soit 45'000 fr. En résumé, il a considéré que l'employeur avait contrevenu à son obligation de ne pas licencier B._ pendant la durée de la mesure et qu'aucun juste motif de licenciement n'avait été invoqué. B. Par jugement du 20 janvier 2015, la Chambre des assurances sociales de la Cour de justice de la République et canton de Genève a rejeté le recours formé par la société contre la décision sur opposition. C. A._ SA interjette un recours en matière de droit public contre ce jugement, dont elle demande l'annulation en concluant principalement à l'annulation des décisions de l'OCE des 17 juin et 12 septembre 2014. Subsidiairement, elle conclut au renvoi de la cause à l'instance précédente, pour nouvelle décision, le tout sous suite de frais et dépens. L'OCE conclut au rejet du recours, tandis que la juridiction cantonale et le Secrétariat d'Etat à l'économie (SECO) ont renoncé à se déterminer. Le 4 mai 2015, A._ SA a déposé des observations complémentaires.