Spec-Zone.ru › RethinkDB javascript

Команда ReQL: concatMap

Синтаксис команды

stream.concatMap(function) → stream
array.concatMap(function) → array

Описание

Объединение одного или нескольких элементов в одну последовательность с помощью функции отображения.

concatMap работает аналогично map, применяя заданную функцию к каждому элементу в последовательности, но всегда возвращает одну последовательность. Если функция отображения возвращает последовательность, map будет генерировать последовательность последовательностей:

r.expr([1, 2, 3]).map(function(x) { return [x, x.mul(2)] }).run(conn, callback)

Результат:

[[1, 2], [2, 4], [3, 6]]

В то время как concatMap с той же функцией отображения объединит эти последовательности в одну:

r.expr([1, 2, 3]).concatMap(function(x) { return [x, x.mul(2)] }).run(conn, callback)

Результат:

[1, 2, 2, 4, 3, 6]

Значение возврата, массив или поток, будет иметь тот же тип, что и входные данные.

Пример: Построить последовательность всех монстров, побежденных героями Marvel. Поле «defeatedMonsters» — это массив из одного или нескольких имен монстров.

r.table('marvel').concatMap(function(hero) {
    return hero('defeatedMonsters')
}).run(conn, callback)

Пример: Моделирование eqJoin с использованием concatMap. (Так внутренне реализуются объединения ReQL.)

r.table("posts").concatMap(function(post) {
	return r.table("comments").getAll(
		post("id"),
		{ index:"postId" }
	).map(function(comment) {
		return { left: post, right: comment }
	})
}).run(conn, callback)

Связанные команды

  • map

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/concat_map/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API