фильтр и диапазон с картой не работают - PullRequest
0 голосов
/ 03 марта 2020

мне нужно go над списком, но извлечь из него только первые два элемента.

я написал следующий код

payload.list.*listItem filter ($.type == "supervisor") map {

// other code

}

, это сработало идеально. Затем я изменил его, чтобы извлечь только первые два элемента, как этот

payload.list.*listItem filter ($.type == "supervisor") [0 to 1] map {

// other code

}

, и он больше не работает. Я не получаю ошибки, но другой код не работает, как будто оператор карты не имеет ничего к go.

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

Ответы [ 2 ]

3 голосов
/ 03 марта 2020

Селектор диапазона должен использоваться непосредственно над массивом, поэтому вам просто нужно правильно сделать выбор:

(payload.list.*listItem filter ($.type == "supervisor"))[0 to 1] map {

// other code

}
1 голос
/ 04 марта 2020

Вам необходимо добавить круглые скобки, чтобы обеспечить приоритет. Кроме того, я удивлен, что это сработало для вас. Мне нужно было ввести «тип» в одинарные кавычки, чтобы заставить его работать, так как это ключевое слово dataweave. Я сделал это ?($$<2) вместо [0 to 1], так как я не был уверен, было ли у вас по крайней мере два объекта на выходе фильтра. Если вы знаете, у вас будет как минимум два, оставьте все как есть.

(payload.list.*listItem filter ($.'type' == "supervisor"))[?($$<2)] map (value, index) -> 
    {
        "key":value
    }

Вот ссылка на документацию Dataweave о приоритете. Это зацепило многих людей. В большинстве случаев безопаснее использовать паренс.

...