Saltar al contenido principal
Versión: 20 R8 BETA

Collection

La clase Collection gestiona variables de tipo Collection.

Una colección es inicializada con los comandos New collection o New shared collection.

Ejemplo

Notas

Resumen

.at( index : Integer ) : any
devuelve el elemento en la posición index, permitiendo enteros positivos y negativos
.average( {propertyPath : Text } ) : Real
devuelve la media aritmética (promedio) de los valores definidos en la instancia de la colección
.clear() : Collection
elimina todos los elementos de la instancia de la colección y devuelve una colección vacía
.combine( col2 : Collection {; index : Integer } ) : Collection
inserta elementos col2 al final o en la posición index especificada en la instancia de la colección y devuelve la colección modificada
.concat( value : any { ;...valueN } ) : Collection
devuelve una nueva colección que contiene los elementos de la colección original con todos los elementos del parámetro value añadidos al final
.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection

devuelve una copia profunda de la instancia de la colección
.count( { propertyPath : Text } ) : Real
devuelve el número de elementos no nulos en la colección
.countValues( value : any {; propertyPath : Text } ) : Real
devuelve el número de veces que se encuentra el valor en la colección
.distinct( {options : Integer} ) : Collection
.distinct( propertyPath : Text {; options : Integer } ) : Collection

devuelve una colección que contiene sólo valores distintos (diferentes) de la colección original
.equal( collection2 : Collection {; option : Integer } ) : Boolean
compara recursivamente el contenido de la colección y collection2 (comparación profunda/deep comparison)
.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean

devuelve true si todos los elementos de la colección han superado con éxito una prueba implementada en el objeto formula o el método methodName
.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection

crea y devuelve una nueva colección que contiene valores propertyPath extraídos de la colección original de objetos
.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection

llena la colección con el value especificado, opcionalmente desde el índice startFrom hasta el índice end, y devuelve la colección resultante
.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection

devuelve una nueva colección que contiene todos los elementos de la colección original para los que el resultado de formula o methodName es true
.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any

devuelve el primer valor de la colección para el que el resultado de formula o de methodName, aplicado a cada elemento, devuelve true
.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer

devuelve el índice, en la colección, del primer valor para el que formula o methodName, aplicados sobre cada elemento, devuelven true
.first() : any
devuelve el primer elemento de la colección
.flat( { depth : Integer } ) : Collection
crea una nueva colección con todos los elementos de la subcolección concatenados recursivamente hasta la depth especificada
.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection
.flatMap( methodName : Text { ; ...param : any } ) : Collection

crea una nueva colección basada en el resultado de la llamada a la función formula 4D o al método methodName sobre cada elemento de la colección original y aplanada por una profundidad de 1
.includes( toSearch : expression { ; startFrom : Integer } ) : Boolean
devuelve True si la expresión toSearch se encuentra entre los elementos de la colección, en caso contrario False
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer
busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la primera ocurrencia encontrada, o -1 si no se encontró
.indices( queryString : Text { ; ...value : any } ) : Collection
devuelve índices, en la colección original, de elementos de la colección de objetos que coinciden con las condiciones de búsqueda queryString
.insert( index : Integer ; element : any ) : Collection
inserta element en la posición index especificada en la instancia de la colección y devuelve la colección modificada
.join( delimiter : Text { ; option : Integer } ) : Text
convierte todos los elementos de la colección en cadenas y las concatena utilizando la cadena delimiter especificada como separador
.last() : any
devuelve el último elemento de la colección
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer
busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la última ocurrencia
.length : Integer
devuelve el número de elementos en la colección
.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection

crea una nueva colección basada en el resultado de la llamada a la función formula 4D o al método methodName sobre cada elemento de la colección original
.max( { propertyPath : Text } ) : any
devuelve el elemento con el valor más alto de la colección<! - END REF --> (el último elemento de la colección, ya que sería ordenado en orden ascendente usando el .sort() función).

Lanzamiento

Si la colección está vacía, .max() devuelve Undefined.

Ejemplo

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$max:=$col.max() //{name:Alabama,salary:10500}
$maxSal:=$col.max("salary") //50000
$maxName:=$col.max("name") //"Wesson"
                           |

| .min( { propertyPath : Text } ) : any
devuelve el elemento con el valor más pequeño de la colección | | .multiSort() : Collection
.multiSort( colsToSort : Collection ) : Collection
.multiSort( formula : 4D.Function ; colsToSort : Collection ) : Collection

permite realizar una ordenación sincronizada multinivel sobre un conjunto de colecciones | | .orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection

devuelve una nueva colección que contiene todos los elementos de la colección en el orden especificado | | .orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

devuelve una nueva colección que contiene todos los elementos de la colección en el orden definido mediante la función formula 4D o el método methodName | | .pop() : any
elimina el último elemento de la colección y lo devuelve como resultado de la función | | .push( element : any { ;...elementN } ) : Collection
añade uno o más elemento(s) al final de la instancia de la colección y devuelve la colección editada | | .query( queryString : Text ) : Collection
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection

devuelve todos los elementos de una colección de objetos que coinciden con las condiciones de búsqueda | | .reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

aplica la retrollamada formula o methodName a un acumulador y cada elemento de la colección (de izquierda a derecha) para reducirlo a un único valor | | .reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

aplica la retrollamada formula o methodName contra un acumulador y cada elemento de la colección (de derecha a izquierda) para reducirlo a un único valor | | .remove( index : Integer { ; howMany : Integer } ) : Collection
elimina uno o más elementos a partir de la posición index especificada en la colección y devuelve la colección editada | | .resize( size : Integer { ; defaultValue : any } ) : Collection
ajusta la longitud de la colección al nuevo tamaño especificado y devuelve la colección redimensionada | | .reverse( ) : Collection
devuelve una copia profunda de la colección con todos sus elementos en orden inverso | | .shift() : any
elimina el primer elemento de la colección y lo devuelve como resultado de la función | | .slice( startFrom : Integer { ; end : Integer } ) : Collection
devuelve una parte de una colección en una nueva colección | | .some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean

| | .sort() : Collection
.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

ordena los elementos de la colección original y además devuelve la colección ordenada | | .sum( { propertyPath : Text } ) : Real
devuelve la suma de todos los valores de la instancia de la colección | | .unshift( value : any { ;...valueN : any } ) : Collection
inserta el valor(es) dado al principio de la colección |

.at()

Historia
LanzamientoModificaciones
20Añadidos

.at( index : Integer ) : any

ParámetrosTipoDescripción
indexInteger->Índice del elemento a devolver
Resultadoany<-El elemento en ese índice

Descripción

La función .at() devuelve el elemento en la posición index, permitiendo enteros positivos y negativos.

Esta función no modifica la colección original.

Los números enteros negativos cuentan hacia atrás desde el último elemento de la colección.

Igual a

Ejemplo

Lanzamiento

.average()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.average( {propertyPath : Text } ) : Real

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultadoReal, Undefined<-donde:

Descripción

La función .average() devuelve la media aritmética (promedio) de los valores definidos en la instancia de la colección.

Para el cálculo sólo se tienen en cuenta los elementos numéricos (se ignoran otros tipos de elementos).

Si la colección contiene objetos, pasa el parámetro propertyPath para indicar la propiedad del objeto a tener en cuenta.

.average() devuelve undefined si:

  • la colección está vacía,
  • la colección no contiene elementos numéricos,
  • propertyPath no se encuentra en la colección.

Ejemplo 1

 var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12

Ejemplo 2

 var $col : Collection
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$vAvg:=$col.average("salary") //23500

.clear()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.clear() : Collection

ParámetrosTipoDescripción
ResultadoCollection<-Colección original sin elementos eliminados

Descripción

La función .clear() elimina todos los elementos de la instancia de la colección y devuelve una colección vacía.

Esta función modifica la colección original.

Ejemplo

var $col : Collection
$col:=New collection(1;2;5)
$col.clear()
$vSize:=$col.length //$vSize=0

.combine()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.combine( col2 : Collection {; index : Integer } ) : Collection

ParámetrosTipoDescripción
col2Collection->Colección a combinar
indexInteger->Posición a la que se deben combinar los elementos de inserción en la colección (por defecto=length+1)
ResultadoCollection<-Colección original sin elementos eliminados

Descripción

La función .combine() inserta elementos col2 al final o en la posición index especificada en la instancia de la colección y devuelve la colección modificada. A diferencia de la función .insert(), .combine() añade cada valor de col2 en la colección original, y no como un único elemento de la colección.

Esta función modifica la colección original.

Por defecto, los elementos col2 se añaden al final de la colección original. Puede pasar en index la posición donde desea insertar los elementos col2 en la colección.

Atención: recuerde que los elementos de la colección están numerados desde 0.

  • Si index es mayor que la longitud de la colección, el índice inicial real se definirá en la longitud de la colección.
  • Si index < 0, se recalcula como index:=index+length (se considera el desplazamiento desde el final de la colección).
  • En caso de incoherencia, se aplican las siguientes reglas:

Ejemplo

var $c; $fruits : Collection
$c:=New collection(1;2;3;4;5;6)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]

.concat()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.concat( value : any { ;...valueN } ) : Collection

ParámetrosTipoDescripción
valueNumber, Text, Object, Collection, Date, Time, Boolean, Picture->Valores a concatenar. Si value es una colección, todos sus elementos se añaden al final de la colección original.
ResultadoCollection<-Colección original con valores rellenados

Descripción

La función..concat() devuelve una nueva colección que contiene los elementos de la colección original con todos los elementos del parámetro value añadidos al final.

Esta función no modifica la colección original.

La colección devuelta contiene el elemento especificado por startFrom y todos los elementos subsiguientes hasta, pero sin incluir, el elemento especificado por end. Si sólo se especifica el parámetro startFrom, la colección devuelta contiene todos los elementos desde startFrom hasta el último elemento de la colección original.

Ejemplo

var $c : Collection
$c:=New collection(1;2;3;4;5)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$fruits.push(New object("Intruder";"Tomato"))
$c2:=$c.concat($fruits) //[1,2,3,4,5,"Orange","Banana","Apple","Grape",{"Intruder":"Tomato"}]
$c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8]

.copy()

Historia
LanzamientoModificaciones
18 R3Nueva opción ck shared. Nuevos parámetros groupWith
v16 R6Añadidos

.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection

ParámetrosTipoDescripción
optionInteger->ck resolve pointers: resolver punteros antes de copiar,
ck shared: devolver una colección compartida
groupWithColCollection->Colección compartida que se agrupa con la colección resultante
groupWithObjObject->Objeto compartido que se agrupa con la colección resultante
ResultadoCollection<-Colección original ordenada

Descripción

La función .copy() devuelve una copia profunda de la instancia de la colección. Deep copy significa que los objetos o colecciones dentro de la colección original se duplican y no comparten ninguna referencia con la colección devuelta.

Esta función no modifica la colección original.

Lanzamiento

optionDescripción
ck resolve pointersSi la colección original contiene valores de tipo puntero, por defecto la copia también contiene los punteros. Si la colección original contiene valores de tipo puntero, por defecto la copia también contiene los punteros. En este caso, cada puntero presente en la colección se evalúa al copiar y se utiliza su valor desreferenciado.
ck sharedPor defecto, copy() devuelve una colección Clásica (no compartida), incluso si el comando se aplica a una colección compartida. Pasa la constante ck shared para crear una colección compartida. En este caso, puede utilizar el parámetro groupWith para asociar la colección compartida con otra colección u objeto (ver más adelante).

Ejemplo 2

nota

Los objetos Datastore, dataclass y entity no son copiables. Si se llama a .copy() con ellos, se devuelven valores Null.

Ejemplo 1

Queremos copiar la colección regular (no compartida) $lastnames en el objeto compartido $sharedObject. Para ello, debemos crear una copia compartida de la colección ($sharedLastnames).

var $sharedObject : Object
var $lastnames;$sharedLastnames : Collection
var $text : Text

$sharedObject:=New shared object

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames es una colección estándar

$sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames es una colección compartida

//Now we can put $sharedLastnames into $sharedObject
Use($sharedObject)
$sharedObject.lastnames:=$sharedLastnames
End use

Ejemplo 2

Queremos combinar $sharedColl1 y $sharedColl2. Dado que pertenecen a diferentes grupos compartidos, una combinación directa daría lugar a un error. Dado que pertenecen a diferentes grupos compartidos, una combinación directa daría lugar a un error.

var $sharedColl1;$sharedColl2;$copyColl : Collection

$sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
$sharedColl2:=New shared collection(New shared object("lastname";"Brown"))

//$copyColl pertenece al mismo grupo compartido que $sharedColl2
$copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
Use($sharedColl2)
$sharedColl2.combine($copyColl)
End use

Ejemplo 3

Tenemos una distribución estándar ($lastnames) y queremos ponerla en el Storage de la aplicación. Para ello, debemos crear previamente una copia compartida ($sharedLastnames).

var $lastnames;$sharedLastnames : Collection
var $text : Text

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames es una colección clásica

$sharedLastnames:=$lastnames.copy(ck shared) // copia compartida

Use(Storage)
Storage.lastnames:=$sharedLastnames
End use

Ejemplo 4

Primer elemento de la colección

Mayor que

.count()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.count( { propertyPath : Text } ) : Real

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultadoReal<-Primer elemento de la colección

Descripción

La función .count() devuelve el número de elementos no nulos en la colección.

Si la colección contiene objetos, puede pasar el parámetro propertyPath. En este caso, sólo se tienen en cuenta los elementos que contienen el propertyPath.

Ejemplo

 var $col : Collection
var $count1;$count2 : Real
$col:=New collection(20;30;Null;40)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$col.push(New object("lastName";"Henry";"salary";12000))
$count1:=$col.count() //$count1=7
$count2:=$col.count("name") //$count2=3

.countValues()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.countValues( value : any {; propertyPath : Text } ) : Real

ParámetrosTipoDescripción
valueText, Number, Boolean, Date, Object, Collection->Valor a contar
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultadoReal<-Valor a contar

Descripción

La función .countValues() devuelve el número de veces que se encuentra el valor en la colección.

Puede pasar en value:

  • un valor escalar (texto, número, booleano, fecha),
  • una referencia de objeto o de colección.

Para encontrar un elemento, el tipo de value debe ser equivalente al tipo del elemento; el método utiliza el operador de igualdad.

El parámetro opcional propertyPath permite contar valores dentro de una colección de objetos: pase en propertyPath la ruta de la propiedad cuyos valores quiere contar.

Esta función no modifica la colección original.

Ejemplo 1

 var $col : Collection
var $vCount : Integer
$col:=New collection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

Ejemplo 2

 var $col : Collection
var $vCount : Integer
$col:=New collection
$col.push(New object("name";"Smith";"age";5))
$col.push(New object("name";"Wesson";"age";2))
$col.push(New object("name";"Jones";"age";3))
$col.push(New object("name";"Henry";"age";4))
$col.push(New object("name";"Gross";"age";5))
$vCount:=$col.countValues(5;"age") //$vCount=2

Ejemplo 3

 var $numbers; $letters : Collection
var $vCount : Integer

$letters:=New collection("a";"b";"c")
$numbers:=New collection(1;2;$letters;3;4;5)

$vCount:=$numbers.countValues($letters) //$vCount=1

.distinct()

Historia
LanzamientoModificaciones
20Soporte de ck count values
v16 R6Añadidos

.distinct( {options : Integer} ) : Collection
.distinct( propertyPath : Text {; options : Integer } ) : Collection

ParámetrosTipoDescripción
propertyPathText->Ruta del atributo cuyos valores distintos desea obtener
optionsInteger->ck diacritical, ck count values
ResultadoCollection<-Lanzamiento

Descripción

La función .distinct() devuelve una colección que contiene sólo valores distintos (diferentes) de la colección original.

Esta función no modifica la colección original.

La colección devuelta se clasifica automáticamente. Los valores Null no son devueltos.

Si la colección contiene objetos, puede pasar el parámetro propertyPath para indicar la propiedad del objeto cuyos valores distintos desea obtener.

Ejemplos

ConstanteValorComentario
ck diacritical8La evaluación distingue entre mayúsculas y minúsculas y diferencia los caracteres acentuados. Por defecto si se omite, se realiza una evaluación no diacrítica
ck count values32Devuelve el conteo de elementos para cada valor distinto. Cuando se pasa esta opción, .distinct() devuelve una colección de objetos que contienen un par de atributos {"value":*value*; "count":*count*}.

Ejemplos

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push("a";"b";"c";"A";"B";"c";"b";"b")
$c.push(New object("size";1))
$c.push(New object("size";3))
$c.push(New object("size";1))
$c2:=$c.distinct() //$c2=["a","b","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct(ck diacritical) //$c2=["a","A","b","B","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct("size") //$c2=[1,3]
$c3:=$c.distinct("size";ck count values) //$c3=[{value:1,count:2},{value:3,count:1}]

.equal()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.equal( collection2 : Collection {; option : Integer } ) : Boolean

ParámetrosTipoDescripción
collection2Collection->Colección a comparar
optionInteger->ck diacritical: evaluación diacrítica ("A" # "a" por ejemplo)
ResultadoBoolean<-Descripción

Descripción

La función .equal() compara recursivamente el contenido de la colección y collection2 (comparación profunda/deep comparison) y devuelve true si son idénticas.

Notas
  • La función .equal() solo comprueba la igualdad para los elementos de tipo cadena, booleano, número y null en las colecciones. No verifica la igualdad para objetos nativos.
  • Constantes null: utilizando la palabra clave "null" se encontrarán las propiedades null y undefined.

Por defecto, se realiza una evaluación no diacrítica. La evaluación distingue entre mayúsculas y minúsculas y diferencia los caracteres acentuados.

tip

Una comparación recursiva de colecciones puede llevar mucho tiempo si la colección es grande y contiene numerosos niveles. Si sólo desea comparar dos referencias de colección, puede considerar utilizar el operador de comparación = para las referencias de colección.

Ejemplo

 var $c; $c2 : Collection
var $b : Boolean

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3;4)
$b:=$c.equal($c2) // false

$c:=New collection(New object("1";"a";"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3)
$b:=$c.equal($c2) // false

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2) // true

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2;ck diacritical) //false

.every()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la prueba en
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
paramany->Parámetro(s) a pasar a la formula o methodName
ResultadoBoolean<-Lanzamiento

Descripción

La función .every() devuelve true si todos los elementos de la colección han superado con éxito una prueba implementada en el objeto formula o el método methodName.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

La retrollamada se llama con los parámetros pasados en param (opcional). La retrollamada puede efecturar toda prueba, con o sin los parámetros, y debe devolver true para cada elemento que cumpla la prueba. Recibe un Object en el primer parámetro ($1).

La retrollamada recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

Puede definir los siguientes parámetros:

  • (obligatorio si se ha utilizado un método) $1.result (booleano): true si la evaluación del valor del elemento tiene éxito, false en caso contrario.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

En todos los casos, en el momento en que la función.every() encuentra el primer elemento de la colección evaluado como false, deja de llamar a la retrollamada y devuelve false**.

Por defecto, .every() evalúa toda la colección. Opcionalmente, se puede pasar en startFrom el índice del elemento desde el que iniciar la prueba.

  • Si startFrom >= la longitud de la colección, se devuelve false, lo que significa que no se prueba la colección.
  • Diferente de Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length).
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo 1

var $c : Collection  
var $b : Boolean
var $f : 4D.Function

$f:=Formula($1.value>0)
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every($f) //devuelve true
$c.push(-1)
$b:=$c.every($f) //devuelve false

Ejemplo 2

Este ejemplo comprueba que todos los elementos de una colección son de tipo real:

var $c : Collection
var $b : Boolean
var $f : 4D.Function

$f:=Formula(Value type($1.value)=$2
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every($f;Is real) //$b=true
$c:=$c.push(New object("name";"Cleveland";"zc";35049))
$c:=$c.push(New object("name";"Blountsville";"zc";35031))
$b:=$c.every($f;Is real) //$b=false

.extract()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto cuyos valores deben ser extraídos a la nueva colección
targetpathText->Ruta de la propiedad de destino o nombre de la propiedad
optionInteger->ck keep null: incluye la propiedad null en la colección devuelta (se ignora por defecto). Parámetro ignorado si se pasa targetPath.
ResultadoCollection<-Nueva colección que contiene los valores extraídos

Descripción

La función .extract() crea y devuelve una nueva colección que contiene valores propertyPath extraídos de la colección original de objetos.

Esta función no modifica la colección original.

El contenido de la colección devuelta depende del parámetro targetPath:

  • Si se omite el parámetro targetPath, .extract() llena la nueva colección con los valores propertyPath de la colección original.

Por defecto, los elementos cuya propertyPath es null o indefinida se ignoran en la colección resultante. Puede pasar la constante ck keep null en el parámetro option para incluir estos valores como elementos null en la colección devuelta.

  • Si se pasan uno o más parámetros targetPath (correspondientes a uno o más parámetros propertyPath), .extract() llena la nueva colección con las propiedades propertyPath y cada elemento de la nueva colección es un objeto con propiedades targetPath llenadas con las propiedades propertyPath coincidentes. Se conservan los valores null (el parámetro opción se ignora con esta sintaxis).

Ejemplo 1

var $c : Collection
$c:=New collection
$c.push(New object("name";"Cleveland"))
$c.push(New object("zip";5321))
$c.push(New object("name";"Blountsville"))
$c.push(42)
$c2:=$c.extract("name") // $c2=[Cleveland,Blountsville]
$c2:=$c.extract("name";ck keep null) //$c2=[Cleveland,null,Blountsville,null]

Ejemplo 2

var $c : Collection
$c:=New collection
$c.push(New object("zc";35060))
$c.push(New object("name";Null;"zc";35049))
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.extract("name";"City") //$c2=[{City:null},{City:Cleveland},{City:Blountsville},{City:Adger},{City:Clanton},{City:Clanton}]
$c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:35049},{City:Cleveland,Zip:35049},{City:Blountsville,Zip:35031},{City:Adger,Zip:35006},{City:Clanton,Zip:35046},{City:Clanton,Zip:35045}]

.fill()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection

ParámetrosTipoDescripción
valuenumber, Text, Collection, Object, Date, Boolean->Valor a asignar
startFromInteger->Índice de inicio (incluido)
endInteger->Índice final (no incluido)
Resultadocollection<-Colección original con valores rellenados

Descripción

La función.fill() llena la colección con el value especificado, opcionalmente desde el índice startFrom hasta el índice end, y devuelve la colección resultante.

Esta función modifica la colección original.

  • Si se omite el parámetro startFrom, value se aplica a todos los elementos de la colección (startFrom=0).
  • Si se pasa el parámetro startFrom y se omite end, value se aplica a los elementos de la colección a partir de startFrom hasta el último elemento de la colección (end=length).
  • Si se pasan tanto el parámetro startFrom como end, value se aplica a los elementos de la colección empezando en startFrom hasta el elemento end.

En caso de incoherencia, se aplican las siguientes reglas:

  • Si startFrom < 0, se recalcula como startFrom:=startFrom+length (se considera el desplazamiento desde el final de la colección). Si el valor calculado es negativo, startFrom toma el valor 0.
  • Si end < 0 , se recalcula como end:=end+length.
  • Si end < startFrom (valores pasados o calculados), el método no hace nada.

Ejemplo

 var $c : Collection
$c:=New collection(1;2;3;"Lemon";Null;"";4;5)
$c.fill("2") // $c:=[2,2,2,2,2,2,2,2]
$c.fill("Hello";5) // $c=[2,2,2,2,2,Hello,Hello,Hello]
$c.fill(0;1;5) // $c=[2,0,0,0,0,Hello,Hello,Hello]
$c.fill("world";1;-5) //-5+8=3 -> $c=[2,"world","world",0,0,Hello,Hello,Hello]

.filter()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
paramany->Parámetro(s) a pasar a la formula o methodName
ResultadoCollection<-Nueva colección que contiene elementos filtrados (copia superficial)

Descripción

La función .filter() devuelve una nueva colección que contiene todos los elementos de la colección original para los que el resultado de formula o methodName es true. Esta función devuelve una shallow copy, lo que significa que los objetos o colecciones de ambas colecciones comparten la misma referencia. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para filtrar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

Se llama a la retrollamada con los parámetros pasados en param (opcional) y un objeto en primer parámetro ($1). La retrollamada puede realizar cualquier prueba, con o sin el parámetro(s) y debe devolver true para cada elemento que cumpla la condición y por lo tanto, debe añadirse a la nueva colección.

La retrollamada recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

Puede definir los siguientes parámetros:

  • $1.result (booleano): true si el valor del elemento coincide con la condición de filtro y debe conservarse, false en caso contrario.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.
nota

Cuando se utiliza methodName como callback, y si el método no devuelve ningún valor, .filter() buscará la propiedad $1.result que debe definir como true para cada elemento que cumpla la condición.

Ejemplo 1

Desea obtener la colección de elementos de texto cuya longitud es inferior a 6:

var $col;$colNew : Collection
$col:=New collection("hello";"world";"red horse";66;"tim";"san jose";"miami")
$colNew:=$col.filter(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 6)
//$colNew=["hello","world","tim","miami"]

Ejemplo 2

Quiere filtrar los elementos según su tipo de valor:

 var $c;$c2;$c3 : Collection
var $f : 4D.Function

$f:=Formula(OB Get type($1;"value")=$2)
$c:=New collection(5;3;1;4;6;2)
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c2:=$c.filter($f;Is real) // $c2=[5,3,1,4,6,2]
$c3:=$c.filter($f;Is object)
// $c3=[{name:Cleveland,zc:35049},{name:Blountsville,zc:35031}]

.find()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la búsqueda en
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
paramany->Parámetro(s) a pasar a la formula o methodName
Resultadoany<-La función .multiSort() permite realizar una ordenación sincronizada multinivel sobre un conjunto de colecciones.

Descripción

La función .find() devuelve el primer valor de la colección para el que el resultado de formula o de methodName, aplicado a cada elemento, devuelve true.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

La retrollamada se llama con los parámetros pasados en param (opcional). La retrollamada puede efecturar toda prueba, con o sin los parámetros, y debe devolver true para cada elemento que cumpla la prueba. Recibe un Object en el primer parámetro ($1).

La retrollamada recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

Puede definir los siguientes parámetros:

  • (obligatorio si se ha utilizado un método) $1.result (booleano): true si la evaluación del valor del elemento tiene éxito, false en caso contrario.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Por defecto, .find() busca en toda la colección. Opcionalmente, se puede pasar en startFrom el índice del elemento desde el que iniciar la búsqueda.

  • Si startFrom >= la longitud de la colección, se devuelve -1, lo que significa que la colección no se busca.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Nota: incluso si startFrom es negativo, la colección se sigue buscando de izquierda a derecha.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo 1

Quiere obtener el primer elemento de texto con una longitud menor que 5:

var $col : Collection
$col:=New collection("hello";"world";4;"red horse";"tim";"san jose")
$value:=$col.find(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 5) //$value="tim"

Ejemplo 2

Quiere encontrar el nombre de una ciudad dentro de una colección:

var $c : Collection
var $c2 : Object
$c:=New collection
$c.push(New object("name"; "Cleveland"; "zc"; 35049))
$c.push(New object("name"; "Blountsville"; "zc"; 35031))
$c.push(New object("name"; "Adger"; "zc"; 35006))
$c.push(New object("name"; "Clanton"; "zc"; 35046))
$c.push(New object("name"; "Clanton"; "zc"; 35045))

$c2:=$c.find(Formula($1.value.name=$2); "Clanton") //$c2={name:Clanton,zc:35046}

.findIndex()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer

ParámetrosTipoDescripción
startFromInteger->Índice para iniciar la búsqueda en
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
paramany->Parámetro(s) a pasar a la formula o methodName
ResultadoInteger<-Conjunción

Descripción

La función .findIndex() devuelve el índice, en la colección, del primer valor para el que formula o methodName, aplicados sobre cada elemento, devuelven true.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • methodName, el nombre de un método proyecto (texto).

La retrollamada se llama con los parámetros pasados en param (opcional). La retrollamada puede efecturar toda prueba, con o sin los parámetros, y debe devolver true para cada elemento que cumpla la prueba. Recibe un Object en el primer parámetro ($1).

La retrollamada recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

Puede definir los siguientes parámetros:

  • (obligatorio si se ha utilizado un método) $1.result (booleano): true si la evaluación del valor del elemento tiene éxito, false en caso contrario.
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Por defecto, .findIndex() busca en toda la colección. Opcionalmente, se puede pasar en startFrom el índice del elemento desde el que iniciar la búsqueda.

  • Si startFrom >= la longitud de la colección, se devuelve -1, lo que significa que la colección no se busca.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Nota: incluso si startFrom es negativo, la colección se sigue buscando de izquierda a derecha.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

Quiere encontrar la posición del primer nombre de ciudad dentro de una colección:

var $c : Collection
var $val2;$val3 : Integer
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$val2:=$c.findIndex(Formula($1.value.name=$2);"Clanton") // $val2=3
$val3:=$c.findIndex($val2+1;Formula($1.value.name=$2);"Clanton") //$val3=4

.first()

Historia
LanzamientoModificaciones
20Añadidos

.first() : any

ParámetrosTipoDescripción
Resultadoany<-Primer elemento de la colección

Descripción

La función .first() devuelve el primer elemento de la colección.

Esta función no modifica la colección original.

La función devuelve Undefined si la colección está vacía.

Ejemplo

var $col; $emptyCol : Collection
var $first : Variante
$col:=New collection(10; 20; 30; "hello"; 50)
$first:=$col.first() // 10

$emptyCol:=New collection() //vacío
// $first:=$emptyCol[0] //daría error
$first:=$emptyCol.first() // devuelve Undefined

.flat()

Historia
LanzamientoModificaciones
20Añadidos

.flat( { depth : Integer } ) : Collection

ParámetrosTipoDescripción
depthInteger->A qué profundidad debe aplanarse una estructura de colección anidada. Por defecto=1
ResultadoCollection<-Colección aplanada

Descripción

La función .flat() crea una nueva colección con todos los elementos de la subcolección concatenados recursivamente hasta la depth especificada.

Por defecto, si se omite el parámetro depth, sólo se aplanará el primer nivel de la estructura de la colección anidada.

Esta función no modifica la colección original.

Ejemplo

$col:=New collection(1; 2; New collection(3; 4))
$col.flat()
// [1, 2, 3, 4]

$col:=New collection(1; 2; New collection(3; 4; New collection(5; 6)))
$col.flat()
// [1, 2, 3, 4, [5, 6]]

$col:=New collection(1; 2; New collection(3; 4; New collection(5; 6)))
$col.flat(2)
// [1, 2, 3, 4, 5, 6]

$col:=New collection(1; 2; New collection(3; 4; 5; 6; New collection(7; 8; New collection(9; 10))))
$col.flat(MAXLONG)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

.flatMap()

Historia
LanzamientoModificaciones
20Añadidos

.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection
.flatMap( methodName : Text { ; ...param : any } ) : Collection

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
paramany->Parámetro(s) a pasar a la formula o methodName
ResultadoCollection<-Comentario

Descripción

La función .flatMap() crea una nueva colección basada en el resultado de la llamada a la función formula 4D o al método methodName sobre cada elemento de la colección original y aplanada por una profundidad de 1. Opcionalmente, puede pasar parámetros a formula o methodName utilizando los parámetros param.

Esta función es idéntica a una llamada a map() seguida de una llamada a flat() de profundidad 1.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

La retrollamada se llama con los parámetros pasados en param (opcional). The callback is called with the parameter(s) passed in param (optional). Recibe un Object en el primer parámetro ($1).

La retrollamada recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

Puede definir los siguientes parámetros:

  • (obligatorio si ha utilizado un método) $1.result (cualquier tipo): nuevo valor transformado para añadir a la colección resultante
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo 1

var $col ; $result : Collection
$col:=New collection(1; 2; 3; 4)

$result:=$col.map(Formula(New collection($1.value*2))
// [[2],[4],[6],[8]]

$result:=$col.flatMap(Formula(New collection($1.value*2))
// [2,4,6,8]

Ejemplo 2

var $col; $result : Collection
$col:=New collection("Hello how"; ""; "are you ?")

$result:=$col.map(Formula(Split string($1.value; " ")))
// [["Hello", "how"], [], ["are", "you", "?"]]

$result:=$col.flatMap(Formula(Split string($1.value; " ")))
// ["Hello", "how", "are", "you", "?"]

Ejemplo 3

Desea calcular el porcentaje de cada valor de la colección con respecto al total:

var $c; $c2 : Collection
var $f : 4D.Function
$c:=New collection(1; 4; 9; 10; 20)
$f:=Formula(New collection($1.value;Round(($1.value/$2)*100; 2)))
$c2:=$c.flatMap($f; $c.sum())
//$c2=[1, 2.27, 4, 9.09,9, 20.45,10, 22.73, 20, 45.45]

.includes()

Historia
LanzamientoModificaciones
20Añadidos

.includes( toSearch : expression { ; startFrom : Integer } ) : Boolean

ParámetrosTipoDescripción
toSearchexpresión->Expresión a buscar en la colección
startFromInteger->Índice para iniciar la búsqueda en
ResultadoBoolean<-True si toSearch se encuentra en la colección

Descripción

La función .includes() devuelve True si la expresión toSearch se encuentra entre los elementos de la colección, en caso contrario False.

Esta función no modifica la colección original.

En toSearch, pase la expresión a encontrar en la colección. Puede pasar:

  • un valor escalar (texto, número, booleano, fecha),
  • el valor null,
  • una referencia de objeto o de colección.

toSearch debe coincidir exactamente con el elemento a encontrar (se aplican las mismas reglas que para el operador de igualdad del tipo de datos).

Diferente de Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length).

  • Si startFrom >= la longitud de la colección, se devuelve False, lo que significa que no se busca en la colección.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Atención: recuerde que los elementos de la colección están numerados desde 0.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

 var $col : Collection
var $in : Boolean
var $obj : Object
$obj:=New object("value"; 10)
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5;$obj)
$in:=$col.includes(3) //True
$in:=$col.includes(5;6) //True
$in:=$col.includes("al@") //True
$in:=$col.includes("Hello") //False
$in:=$col.includes($obj) //True
$in:=$col.includes(New object("value"; 10)) //False

.indexOf()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

ParámetrosTipoDescripción
toSearchexpresión->Expresión a buscar en la colección
startFromInteger->Índice para iniciar la búsqueda en
ResultadoInteger<-Descripción

Descripción

La función .indexOf() busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la primera ocurrencia encontrada, o -1 si no se encontró.

Esta función no modifica la colección original.

En toSearch, pase la expresión a encontrar en la colección. Puede pasar:

  • un valor escalar (texto, número, booleano, fecha),
  • el valor null,
  • una referencia de objeto o de colección.

toSearch debe coincidir exactamente con el elemento a encontrar (se aplican las mismas reglas que para el operador de igualdad del tipo de datos).

Diferente de Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length).

  • Si startFrom >= la longitud de la colección, se devuelve -1, lo que significa que la colección no se busca.
  • Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length). Nota: incluso si startFrom es negativo, la colección se sigue buscando de izquierda a derecha.
  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

 var $col : Collection
var $i : Integer
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5)
$i:=$col.indexOf(3) //$i=4
$i:=$col.indexOf(5;5) //$i=9
$i:=$col.indexOf("al@") //$i=5
$i:=$col.indexOf("Hello") //$i=-1

.indices()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.indices( queryString : Text { ; ...value : any } ) : Collection

ParámetrosTipoDescripción
queryStringText->Criterio de búsqueda
valueany->Valor(es) a comparar cuando se utiliza(n) marcador(es) de posición
ResultadoCollection<-Índice(s) de elementos que coinciden con queryString en la colección

Descripción

La función .indices() funciona exactamente igual que la función .query() pero devuelve índices, en la colección original, de elementos de la colección de objetos que coinciden con las condiciones de búsqueda queryString, y no elementos en sí. Los índices se devuelven en orden ascendente.

Esta función no modifica la colección original.

El parámetro queryString utiliza la siguiente sintaxis:

propertyPath comparator value {logicalOperator propertyPath comparator value}

Para una descripción detallada de los parámetros queryString y value, consulte la función dataClass.query().

Ejemplo

 var $c; $icol : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))

$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$icol:=$c.indices("name = :1";"Cleveland") // $icol=[0]
$icol:=$c.indices("zc > 35040") // $icol=[0,3,4]

.insert()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.insert( index : Integer ; element : any ) : Collection

ParámetrosTipoDescripción
indexInteger->Dónde insertar el elemento
elementany->Elemento a insertar en la colección
ResultadoCollection<-Colección original que contiene los elementos insertados

Descripción

La función .insert() inserta element en la posición index especificada en la instancia de la colección y devuelve la colección modificada.

Esta función modifica la colección original.

En index, pase la posición donde quiere insertar el elemento en la colección.

Atención: recuerde que los elementos de la colección están numerados desde 0.

  • Ejemplo 1
  • Si index <0, se recalcula como index:=index+length (se considera el desplazamiento desde el final de la colección).
  • Si el valor calculado es negativo, index toma el valor 0.

Se puede insertar cualquier tipo de elemento aceptado por una colección, incluso otra colección.

Ejemplo

 var $col : Collection
$col:=New collection("a";"b";"c";"d") //$col=["a","b","c","d"]
$col.insert(2;"X") //$col=["a","b","X","c","d"]
$col.insert(-2;"Y") //$col=["a","b","X","Y","c","d"]
$col.insert(-10;"Hi") //$col=["Hi","a","b","X","Y","c","d"]

.join()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.join( delimiter : Text { ; option : Integer } ) : Text

ParámetrosTipoDescripción
delimiterText->Separador a utilizar entre elementos
optionInteger->ck ignore null or empty: ignorar las cadenas nulas y vacías en el resultado
ResultadoText<-Cadena que contiene todos los elementos de la colección, separados por un delimitador

Descripción

La función .join() convierte todos los elementos de la colección en cadenas y las concatena utilizando la cadena delimiter especificada como separador.La función devuelve la cadena resultante.

Esta función no modifica la colección original.

Por defecto, los elementos nulos o vacíos de la colección se devuelven en la cadena resultante. Pase la constante ck ignore null or empty en el parámetro option si quiere eliminarlos de la cadena resultante.

Ejemplo

 var $c : Collection
var $t1;$t2 : Text
$c:=New collection(1;2;3;"Paris";Null;"";4;5)
$t1:=$c.join("|") //1|2|3|Paris|null||4|5
$t2:=$c.join("|";ck ignore null or empty) //1|2|3|Paris|4|5

.last()

Historia
LanzamientoModificaciones
20Añadidos

.last() : any

ParámetrosTipoDescripción
Resultadoany<-Último elemento de la colección

Descripción

La función .last() devuelve el último elemento de la colección.

Esta función no modifica la colección original.

La función devuelve Undefined si la colección está vacía.

Ejemplo

Propiedad

.lastIndexOf()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

ParámetrosTipoDescripción
toSearchexpresión->El elemento que se va a buscar dentro de la colección
startFromInteger->Índice para iniciar la búsqueda en
ResultadoInteger<-Índice de la última ocurrencia de toSearch en la colección, -1 si no se encuentra

Descripción

La función .lastIndexOf() busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la última ocurrencia , o -1 si no se encontró.

Esta función no modifica la colección original.

En toSearch, pase la expresión a encontrar en la colección. Puede pasar:

  • un valor escalar (texto, número, booleano, fecha),
  • el valor null,
  • una referencia de objeto o de colección.

toSearch debe coincidir exactamente con el elemento a encontrar (se aplican las mismas reglas que para el operador de igualdad del tipo de datos).

Ejemplo 2

  • Si startFrom >= la longitud de la colección menos uno (coll.length-1), se busca en toda la colección (por defecto).
  • Si startFrom < 0, se recalcula como startFrom:=startFrom+length (se considera el desplazamiento desde el final de la colección). Si el valor calculado es negativo, se devuelve -1 (no se busca en la colección). Nota: incluso si startFrom es negativo, la colección se sigue buscando de derecha a izquierda.
  • Descripción

Ejemplo

Tipo

.length

Historia
LanzamientoModificaciones
v16 R5Añadidos

.length : Integer

Descripción

La propiedad .length devuelve el número de elementos en la colección.

La propiedad .length se inicializa cuando se crea la colección. Añadir o eliminar elementos actualiza la longitud, si es necesario. Esta propiedad es sólo lectura (no se puede utilizar para definir el tamaño de la colección).

Ejemplo

Tipo

.map()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
paramany->Parámetro(s) a pasar a la formula o methodName
ResultadoCollection<-.pop(), utilizado junto con .push(), puede utilizarse para implementar una funcionalidad primera entrada última salida de tratamiento de datos apilados:

Descripción

La función .map() crea una nueva colección basada en el resultado de la llamada a la función formula 4D o al método methodName sobre cada elemento de la colección original. Opcionalmente, puede pasar parámetros a formula o methodName utilizando los parámetros param. .map() siempre devuelve una colección con el mismo tamaño que la colección original, excepto si se utilizó $1.stop (ver más abajo).

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

La retrollamada se llama con los parámetros pasados en param (opcional). The callback is called with the parameter(s) passed in param (optional). Recibe un Object en el primer parámetro ($1).

La retrollamada recibe los siguientes parámetros:

  • en $1.value: valor del elemento a evaluar
  • en $2: param
  • en $N...: paramN...

Puede definir los siguientes parámetros:

  • (obligatorio si ha utilizado un método) $1.result (cualquier tipo): nuevo valor transformado para añadir a la colección resultante
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo

var $c; $c2 : Collection
$c:=New collection(1; 4; 9; 10; 20)
$c2:=$c.map(Formula(Round(($1.value/$2)*100; 2)); $c.sum())
//$c2=[2.27,9.09,20.45,22.73,45.45]

.max()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.max( { propertyPath : Text } ) : any

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para la evaluación
ResultadoBoolean, Text, Number, Collection, Object, Date<-Valor máximo en la colección

Descripción

Diferente de Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length).

Esta función no modifica la colección original.

La función .max() devuelve el elemento con el valor más alto de la colección<! - END REF --> (el último elemento de la colección, ya que sería ordenado en orden ascendente usando el .sort() función).

Lanzamiento

Si la colección está vacía, .max() devuelve Undefined.

Ejemplo

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$max:=$col.max() //{name:Alabama,salary:10500}
$maxSal:=$col.max("salary") //50000
$maxName:=$col.max("name") //"Wesson"

.min()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.min( { propertyPath : Text } ) : any

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para la evaluación
ResultadoBoolean, Text, Number, Collection, Object, Date<-Valor mínimo en la colección

Descripción

La función .min() devuelve el elemento con el valor más pequeño de la colección (el primer elemento de la colección tal y como se ordenaría en orden ascendente utilizando la función .sort()).

Esta función no modifica la colección original.

Si la colección contiene diferentes tipos de valores, la función .min() devolverá el valor mínimo dentro del primer tipo de elemento en el orden de la lista de tipos (ver la descripción de .sort()).

Si la colección contiene objetos, pase el parámetro propertyPath para indicar la propiedad del objeto cuyo valor mínimo desea obtener.

Si la colección está vacía, .min() devuelve Undefined.

Ejemplo

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$min:=$col.min() //55
$minSal:=$col.min("salary") //10000
$minName:=$col.min("name") //"Alabama"

.multiSort()

Historia
LanzamientoModificaciones
20 R3Añadidos

.multiSort() : Collection
.multiSort( colsToSort : Collection ) : Collection
.multiSort( formula : 4D.Function ; colsToSort : Collection ) : Collection

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
colsToSortCollection->Colección de colecciones y/u objetos con propiedades {collection:colToSort;order:ck ascending o ck descending}
ResultadoCollection<-La nueva colección

Descripción

Ejemplo 2

Esta función modifica la colección original, así como todas las colecciones utilizadas en el parámetro colsToSort.

Si se llama a .multiSort() sin parámetros, la función tiene el mismo efecto que la función .sort(): la colección se ordena (sólo valores escalares) en orden ascendente por defecto, según su tipo. Si la colección contiene valores de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después.

  1. null
  2. booleans
  3. cadenas
  4. numbers
  5. objects
  6. collections
  7. dates

Ordenación sincronizada de un nivel

Para ordenar varias colecciones de forma sincrónica, basta con pasar en colsToSort una colección de colecciones para ordenar. Puede pasar un número ilimitado de colecciones. La colección original se ordenará en orden ascendente y todas las colecciones colsToSort se ordenarán de forma sincronizada.

nota

Todas las colecciones colsToSort deben tener el mismo número de elementos, de lo contrario se devuelve un error.

Si desea ordenar las colecciones en algún otro orden que no sea ascendente, debe suministrar una formula (objeto Formula) que defina el orden de clasificación. El valor de retorno debe ser un booleano que indica el orden relativo de los dos elementos: True si $1.value es menor que $1.value2, False si $1.value es mayor que $1.value2. Puede ofrecer parámetros adicionales a la fórmula si es necesario.

La fórmula recibe los siguientes parámetros:

  • $1 (objeto), donde:
  • $1.value (todo tipo): valor del primer elemento a comparar
  • $1.value2 (todo tipo): valor del segundo elemento a comparar
  • $2...$N (cualquier tipo): parámetros adicionales

Ordenación sincronizada multinivel

Ordenar una colección de números de forma ascendente y descendente:

Los niveles de ordenación vienen determinados por el orden en que se pasan las colecciones en el parámetro colsToSort: la posición de un objeto collection/order en la sintaxis determina su nivel de ordenación.

nota

Ordenar una colección de números de forma ascendente y descendente:

Ejemplo 1

Descripción

var $col;$col2;$col3 : Collection
$col:=["A"; "C"; "B"]
$col2:=[1; 2; 3]
$col3:=[["Jim"; "Philip"; "Maria"]; ["blue"; "green"]; ["11"; 22; "33"]]

$col.multiSort([$col2; $col3])
//$col=["A","B","C"]
//$col2=[1,3,2]
//$col3[0]=["Jim","Philip","Maria"]
//$col3[1]=["11",22,"33"]
//$col3[2]=["blue","green"]

Ejemplo 2

Desea ordenar tres colecciones sincronizadas: city, country y continent. Quiere una ordenación ascendente de la primera y la tercera colección y sincronización para la segunda colección:

var $city : Collection
var $country : Collection
var $continent : Collection

$city:=["Paris"; "Lyon"; "Rabat"; "Eching"; "San Diego"]
$country:=["France"; "France"; "Morocco"; "Germany"; "US"]
$continent:=["Europe"; "Europe"; "Africa"; "Europe"; "America"]

$continent.multiSort([$country; {collection: $city; order: ck ascending}])
//$continent=["Africa","America","Europe","Europe","Europe"]
//$country=["Morocco","US","France","France","Germany"]
//$city=["Rabat","San Diego","Lyon","Paris","Eching"]

Ejemplo 3

También puede sincronizar colecciones de objetos.

var $name : Collection
var $address : Collection
$name:=[]
$name.push({firstname: "John"; lastname: "Smith"})
$name.push({firstname: "Alain"; lastname: "Martin"})
$name.push({firstname: "Jane"; lastname: "Doe"})
$name.push({firstname: "John"; lastname: "Doe"})
$address:=[]
$address.push({city: "Paris"; country: "France"})
$address.push({city: "Lyon"; country: "France"})
$address.push({city: "Eching"; country: "Germany"})
$address.push({city: "Berlin"; country: "Germany"})

$name.multiSort(Formula($1.value.firstname<$1.value2.firstname); [$address])
//"Alain Martin","Jane Doe","John Smith","John Doe"
//"Lyon France","Eching Germany","Paris France","Berlin Germany"

.orderBy()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection

ParámetrosTipoDescripción
pathStringsText->Ruta(s) de propiedad(es) a utilizar para ordenar la colección
pathObjectsCollection->Colección de objetos criterio
ascOrDescInteger->Ejemplo 1
ResultadoCollection<-Copia ordenada de la colección (copia superficial)

Descripción

La función .orderBy() devuelve una nueva colección que contiene todos los elementos de la colección en el orden especificado.

Esta función devuelve una copia superficial, lo que significa que los objetos o colecciones de ambas colecciones comparten la misma referencia. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

Si no se pasa ningún parámetro, la función ordena los valores escalares de la colección en orden ascendente (otros tipos de elementos como objetos o colecciones se devuelven con un orden interno). Puede modificar este orden automático pasando las constantes ck ascending o ck descending en el parámetro ascOrDesc (ver más abajo).

También puede pasar un parámetro de criterios para definir cómo deben ordenarse los elementos de la colección. Se admiten tres sintaxis para este parámetro:

  • pathStrings : Texto (fórmula). Sintaxis: propertyPath1 {desc or asc}, propertyPath2 {desc or asc},... (orden por defecto: asc). pathStrings contiene una fórmula compuesta de 1 a x rutas de propiedades y (opcionalmente) órdenes de clasificación, separados por comas. El orden en que se pasan las propiedades determina la prioridad de ordenación de los elementos de la colección. Por defecto, las propiedades se clasifican en orden ascendente. Puede definir el orden de clasificación de una propiedad en la cadena de criterios, separado de la ruta de la propiedad por un solo espacio: pase "asc" para ordenar en orden ascendente o "desc" en orden descendente.

  • pathObjects : Collection. Puede añadir tantos objetos en la colección pathObjects como sea necesario. Por defecto, las propiedades se clasifican en orden ascendente ("descending" es false). Cada elemento de la colección contiene un objeto estructurado de la siguiente manera:

{
"propertyPath": string,


"descending": boolean

}
  • ascOrDesc : Integer. Se pasa una de las siguientes constantes del tema Objects and collections:
ConstanteTipoValorComentario
ck ascendingInteger0Los elementos se ordenan de forma ascendente (por defecto)
ck descendingInteger1Los elementos se ordenan de forma descendente

Esta sintaxis sólo ordena los valores escalares de la colección (otros tipos de elementos, como objetos o colecciones, se devuelven desordenados).

Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después.

  1. null
  2. booleans
  3. cadenas
  4. numbers
  5. objects
  6. collections
  7. dates

Ejemplo 1

Ordenar una colección de números de forma ascendente y descendente:

 var $c; $c2; $c3 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(Random)
End for
$c2:=$c.orderBy(ck ascending)
$c3:=$c.orderBy(ck descending)

Ejemplo 2

Ordenar una colección de objetos a partir de una fórmula de texto con nombres de propiedades:

 var $c; $c2 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$c2:=$c.orderBy("value desc")
$c2:=$c.orderBy("value desc, id")
$c2:=$c.orderBy("value desc, id asc")

Ordenar una colección de objetos con una ruta de propiedades:

 var $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))

$c2:=$c.orderBy("phones.p1 asc")

Ejemplo 3

Ordenar una colección de objetos utilizando una colección de objetos criterio:

 var $crit; $c; $c2 : COllection
$crit:=New collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$crit.push(New object("propertyPath";"value";"descending";True))
$crit.push(New object("propertyPath";"id";"descending";False))
$c2:=$c.orderBy($crit)

Ordenar con una ruta de propiedad:


var $crit; $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
$crit:=New collection(New object("propertyPath";"phones.p2";"descending";True))
$c2:=$c.orderBy($crit)

.orderByMethod()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
extraParamany->Parámetro(s) a pasar
ResultadoCollection<-Copia ordenada de la colección (copia superficial)

Descripción

La función .orderByMethod() devuelve una nueva colección que contiene todos los elementos de la colección en el orden definido mediante la función formula 4D o el método methodName.

Esta función devuelve una copia superficial, lo que significa que los objetos o colecciones de ambas colecciones comparten la misma referencia. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;

  • o methodName, el nombre de un método proyecto (texto).

En la retrolamada, pase un código que compare dos valores y devuelva true si el primer valor es menor que el segundo. Puede ofrecer los parámetros extraParam a la retrollamada si es necesario.

La retrollamada recibe los siguientes parámetros:

  • $1 (objeto), donde:
  • $1.value (todo tipo): valor del primer elemento a comparar
  • $1.value2 (todo tipo): valor del segundo elemento a comparar
  • $2...$N (cualquier tipo): parámetros adicionales

Si utilizó un método, debe definir el siguiente parámetro:

  • $1.result (boolean): true si $1.value < $1.value2, false de lo contrario

Ejemplo 1

Desea ordenar una colección de cadenas en orden numérico en lugar de orden alfabético:

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push("33";"4";"1111";"222")
$c2:=$c.orderBy() //$c2=["1111","222","33","4"], alphabetical order
$c3:=$c.orderByMethod(Formula(Num($1.value)<Num($1.value2))) // $c3=["4","33","222","1111"]

Ejemplo 2

Quiere ordenar una colección de cadenas según su longitud:

 var $fruits; $c2 : Collection
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod(Formula(Length(String($1.value))>Length(String($1.value2))))
//$c2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,pear,fig]

Ejemplo 3

Ordenar los elementos de la colección por código de caracteres o alfabéticamente:

var $strings1; $strings2 : Collection
$strings1:=New collection("Alpha";"Charlie";"alpha";"bravo";"Bravo";"charlie")

//utilizando el código de caracteres:
$strings2:=$strings1.orderByMethod(Function(sortCollection);sk character codes)
// result : ["Alpha","Bravo","Charlie","alpha","bravo","charlie"]

//utilizando el lenguaje:
$strings2:=$strings1.orderByMethod(Function(sortCollection);sk strict)
// resultado : ["alpha","Alpha","bravo","Bravo","charlie","Charlie"]

Con el siguiente método Flatten:

var $1 : Object
var $2: Integer // opción de ordenación

$1.result:=(Compare strings($1.value;$1.value2;$2)<0)

.pop()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.pop() : any

ParámetrosTipoDescripción
Resultadoany<-Último elemento de la colección

Descripción

La función .pop() elimina el último elemento de la colección y lo devuelve como resultado de la función.

Esta función modifica la colección original.

Cuando se aplica a una colección vacía, .pop() devuelve undefined.

Ejemplo

.pop(), utilizado junto con .push(), puede utilizarse para implementar una funcionalidad primera entrada última salida de tratamiento de datos apilados:

Lanzamiento

.push()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.push( element : any { ;...elementN } ) : Collection

ParámetrosTipoDescripción
elementany->Elemento(s) a añadir a la colección
ResultadoCollection<-Colección que contiene los elementos añadidos

Descripción

La función .push() añade uno o más elemento(s) al final de la instancia de la colección y devuelve la colección editada.

Esta función modifica la colección original.

Ejemplo 1

 var $col : Collection
$col:=New collection(1;2) //$col=[1,2]
$col.push(3) //$col=[1,2,3]
$col.push(6;New object("firstname";"John";"lastname";"Smith"))
//$col=[1,2,3,6,{firstname:John,lastname:Smith}

Ejemplo 2

Desea ordenar la colección resultante:

 var $col; $sortedCol : Collection
$col:=New collection(5;3;9) //$col=[5,3,9]
$sortedCol:=$col.push(7;50).sort()
//$col=[5,3,9,7,50]
//$sortedCol=[3,5,7,9,50]

.query()

Historia
LanzamientoModificaciones
20 R6Ejemplo 1
17 R5Soporte de querySettings
v16 R6Añadidos

.query( queryString : Text ) : Collection
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection

ParámetrosTipoDescripción
queryStringText->Criterio de búsqueda
valueany->Valor(es) a comparar cuando se utiliza(n) marcador(es) de posición
querySettingsObject->Opciones de búsqueda: parámetros, atributos
ResultadoCollection<-Descripción

Descripción

La función .query() devuelve todos los elementos de una colección de objetos que coinciden con las condiciones de búsqueda definidas por queryString y (opcionalmente) value o querySettings. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Se devuelve una colección vacía si la colección en la que se ejecuta la consulta no contiene el valor buscado.

Esta función no modifica la colección original.

parámetro queryString

El parámetro queryString utiliza la siguiente sintaxis:

propertyPath comparator value {logicalOperator propertyPath comparator value}

donde:

  • propertyPath: ruta de la propiedad sobre la cual quiere ejecutar la consulta. Este parámetro puede ser un nombre simple (por ejemplo, "país") o cualquier ruta de atributo válida (por ejemplo, "país.nombre"). En el caso de una ruta de atributo cuyo tipo es Collection, se utiliza la notación [] para manejar todas las ocurrencias (por ejemplo children[].age).

  • comparator: símbolo que compara propertyPath y value. Se soportan los siguientes símbolos:

ComparaciónSímbolo(s)Comentario
Igual a=, ==Obtiene los datos coincidentes, admite el comodín (@), no distingue entre mayúsculas de minúsculas ni diacríticas.
===, ISObtiene los datos coincidentes, considera @ como carácter estándar, no distingue entre mayúsculas de minúsculas ni diacríticas
Diferente de#, !=Soporta el comodín (@). Equivalent to "Not condition applied on a statement" ).
!==, IS NOTConsidera la @ como un caracter estándar
Condición No aplicada a una sentenciaNOTLos paréntesis son obligatorios cuando se utiliza NOT antes de una instrucción que contiene varios operadores. Equivalent to "Not equal to" ).
Menor que<
Mayor que>
Menor o igual que<=
Mayor o igual que> =
Incluído enINDevuelve los datos iguales a al menos uno de los valores de una colección o de un conjunto de valores, admite el comodín (@)
  • valor: valor a comparar con el valor actual de la propiedad de cada elemento de la colección. Puede ser cualquier valor de expresión constante que coincida con la propiedad del tipo de datos del elemento o un marcador de posición. For example, if the string "v20" is entered as value to compare with an integer attribute, it will be converted to 20.

  • La constante de tipo texto puede pasarse con o sin comillas simples (ver Uso de comillas más abajo). Para consultar una cadena dentro de otra cadena (una consulta de tipo "contiene"), utilice el símbolo de comodín (@) en el valor para aislar la cadena a buscar como se muestra en este ejemplo: "@Smith@". Las siguientes palabras claves están prohibidas para las constantes de texto: true, false.

  • Valores constantes de tipo booleano: true o false (Sensible a las mayúsculas y minúsculas).

  • Valores constantes de tipo numérico: los decimales se separan con un '.' (punto).

  • Constantes de tipo date: formato "YYYY-MM-DD"

  • Constantes null: utilizando la palabra clave "null" se encontrarán las propiedades null y undefined.

  • en el caso de una búsqueda con un comparador IN, value debe ser una colección, o los valores que coincidan con el tipo de la ruta del atributo entre [ ] separados por comas (para las cadenas, los caracteres " deben escaparse con \).

  • logicalOperator: utilizado para unir condiciones múltiples en la búsqueda (opcional). Puede utilizar uno de los siguientes operadores lógicos (se puede utilizar el nombre o el símbolo):

ConjunciónSímbolo(s)
AND&, &&, and
O|,||, or

Utilizar comillas

Cuando utilice comillas dentro de las consultas, debe utilizar comillas simples ' ' dentro de la consulta y comillas dobles " " para encerrar toda la consulta, de lo contrario se devuelve un error. Por ejemplo:

"employee.name = 'smith' AND employee.firstname = 'john'"

Las comillas simples (') no se admiten en los valores buscados, ya que romperían la cadena de búsqueda. Por ejemplo, "comp.name = 'John's pizza' " generará un error. Si necesita buscar en valores con comillas simples, puede considerar el uso de marcadores de posición (ver más abajo).

Uso del paréntesis

Puede utilizar paréntesis en la búsqueda para dar prioridad al cálculo. Por ejemplo, puede organizar una búsqueda de la siguiente manera:

"(employee.age >= 30 OR employee.age <= 65) AND (employee.salary <= 10000 OR employee.status = 'Manager')"

Uso de marcadores de posición

4D le permite utilizar marcadores de posición para los argumentos propertyPath y value dentro del parámetro queryString. Un marcador es un parámetro que se inserta en las cadenas de búsqueda y que se sustituye por otro valor cuando se evalúa la cadena de búsqueda. El valor de los marcadores se evalúa una vez al principio de la búsqueda; no se evalúa para cada elemento.

Lanzamiento

  • Marcadores de posición indexados: los parámetros se insertan como :paramIndex (por ejemplo ":1", ":2"...) en queryString y sus valores correspondientes son proporcionados por la secuencia de parámetros value. en queryString y sus valores correspondientes son proporcionados por la secuencia de parámetros value.

Ejemplo:

$c:=$myCol.query(":1=:2";"city";"Chicago")
  • Copia ordenada de la colección (copia superficial)

Ejemplo:

$o.attributes:={att:"city"}
$o.parameters:={name:"Chicago")
$c:=$myCol.query(":att=:name";$o)

Puede mezclar todos los tipos de argumentos en queryString. Puede mezclar todos los tipos de argumentos en queryString.

  • valores directos (sin marcadores),
  • marcadores indexados y/o con nombre.

El uso de marcadores de posición en las búsquedas se recomienda por las siguientes razones:

  1. Evita la inserción de código malicioso: si utiliza directamente variables completadas por el usuario dentro de la cadena de búsqueda, un usuario podría modificar las condiciones de búsqueda introduciendo argumentos de búsqueda adicionales. Por ejemplo, imagine una cadena de búsqueda como:
 $vquery:="status = 'public' & name = "+myname //el usuario introduce su nombre
$result:=$col.query($vquery)

Esta búsqueda parece segura ya que se filtran los datos no públicos. Sin embargo, si el usuario introduce en el área myname algo como "smith OR status='private', la cadena de consulta se modificaría en el paso de interpretación y podría devolver datos privados.

Cuando se utilizan marcadores de posición, no es posible anular las condiciones de seguridad:

 $result:=$col.query("status='public' & name=:1";myname)

En este caso, si el usuario introduce smith OR status='private' en el área myname, no se interpretará en la cadena de búsqueda, sino que sólo se pasará como valor. La búsqueda de una persona llamada "smith OR status='private'" simplemente fallará.

  1. Evita tener que preocuparse por cuestiones de formato o caracteres, especialmente cuando se manejan los parámetros propertyPath o value que pueden contener caracteres no alfanuméricos como ".", "['...

  2. Permite el uso de variables o expresiones en los argumentos de búsqueda. Ejemplos:

$result:=$col.query("address.city = :1 & name =:2";$city;$myVar+"@")
$result2:=$col.query("company.name = :1";"John's Pizzas")

El uso de una referencia de colección o referencia de objeto en el parámetro value no está soportado con esta sintaxis. Debe utilizar el parámetro querySettings.

Búsqueda de valores null

Cuando se buscan valores null, no se puede utilizar la sintaxis de marcador de posición porque el motor de búsqueda considera null como un valor de comparación invalido. Por ejemplo, si ejecuta la siguiente búsqueda:

Lanzamiento

No obtendrá el resultado esperado porque el valor null será evaluado por 4D como un error resultante de la evaluación del parámetro (por ejemplo, un atributo procedente de otra búsqueda). Para este tipo de búsquedas, debe utilizar la sintaxis de búsqueda directa:

Lanzamiento

Referencia de objeto o de colección como valor

Puede consultar en una colección utilizando una referencia de objeto o una referencia de colección como parámetro value a comparar. La consulta coincidirá con los objetos de la colección que se refieran a (apunten a) la misma instancia de objeto o de colección.

Para una descripción detallada de los parámetros queryString y value, consulte la función dataClass.query().

ComparaciónSímbolo(s)
Igual a=, ==
Diferente de#, !=

Para construir una consulta con un objeto o una referencia de colección, debe utilizar la sintaxis del parámetro querySettings. Ejemplo con una referencia de objeto:

var $o1:={a: 1}
var $o2:={a: 1} /mismo objeto pero otra referencia
var $o3:=$o1 /mismo objeto y referencia

var $col; $colResult : Collection

$col:=[{o: $o1}; {o: $o2}; {o: $o3}]
$colResult:=$col.query("o = :v"; {parameters: {v: $o3}})
//$colResult.length=2
//$colResult[0].o=$o1 es true
//$colResult[1].o=$o1 es true

Ejemplo con una referencia de colección:


$c1:=[1; 2; 3]
$c2:=[1; 2; 3] //misma colección pero otra referencia
$c3:=$c1 //misma colección y referencia

$col:=[{c: $c1}; {c: $c2}; {c: $c3}]
$col2:=$col.query("c = :v"; {parameters: {v: $c3}})
//$col2.length=2
//$col2[0].c=$c1 es true
//$col2[1].c=$c1 es true

Parámetro querySettings

En el parámetro querySettings, puede pasar un objeto que contenga marcadores de posición de consulta como objetos. Se soportan las siguientes propiedades:

PropiedadTipoDescripción
parametersObjectMarcadores de posición con nombre para los valores utilizados en queryString. Los valores se expresan como pares propiedad / valor, donde propiedad es el nombre del marcador de posición insertado para un valor en queryString o formula (":placeholder") y valor es el valor a comparar. Puede combinar marcadores de posición indexados (valores pasados directamente en parámetros de valor) y valores de marcadores de posición con nombre en la misma búsqueda.
attributesObjectMarcadores de posición con nombre para rutas de atributos utilizados en la queryString. Los atributos se expresan como pares propiedad / valor, donde propiedad es el nombre del marcador de posición insertado para una ruta de atributo en queryString (":placeholder"), y valor puede ser una cadena o una colección de cadenas. Cada valor es una ruta que puede designar una propiedad en un objeto de la colección
Tipo de objetoDescripción
CadenaRuta de acceso del atributo expresado utilizando la notación de punto, por ejemplo, "name" o "user.address.zipCode"
Colección de cadenasCada cadena de la colección representa un nivel de attributePath, por ejemplo, \["name"] o \["user","address","zipCode"]. Using a collection allows querying on attributes with names that are not compliant with dot notation, e.g. ["4Dv17.1","en/fr"]
You can mix indexed placeholders (values directly passed in value parameters) and named placeholder values in the same query.
nota

El uso de este parámetro es obligatorio si desea consultar en una colección utilizando una referencia de colección o una referencia de un objeto.

Ejemplo 1

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.query("name = :1";"Cleveland") //$c2=[{name:Cleveland,zc:35049}]
$c3:=$c.query("zc > 35040") //$c3=[{name:Cleveland,zc:35049},{name:Clanton,zc:35046},{name:Clanton,zc:35045}]

Ejemplo 2

 var $c : Collection
$c:=New collection
$c.push(New object("name";"Smith";"dateHired";!22-05-2002!;"age";45))
$c.push(New object("name";"Wesson";"dateHired";!30-11-2017!))
$c.push(New object("name";"Winch";"dateHired";!16-05-2018!;"age";36))

$c.push(New object("name";"Sterling";"dateHired";!10-5-1999!;"age";Null))
$c.push(New object("name";"Mark";"dateHired";!01-01-2002!))

Este ejemplo devuelve las personas cuyo nombre contiene "in":

 $col:=$c.query("name = :1";"@in@")
//$col=[{name:Winch...},{name:Sterling...}]

Este ejemplo devuelve las personas cuyo nombre no empieza por una cadena de una variable (introducida por el usuario, por ejemplo):

 $col:=$c.query("name # :1";$aString+"@")
//if $astring="W"
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}]

Este ejemplo devuelve las personas cuya edad no se conoce (propiedad definida como null o indefinida):

Ejemplo

Este ejemplo devuelve las personas contratadas hace más de 90 días:

Comentario

Ejemplo 3

Búsquedas con fechas:


$entitySelection:=ds.Employee.query("birthDate > :1";"1970-01-01")
$entitySelection:=ds.Employee.query("birthDate <= :1";Current date-10950)
info

Descripción Descripción Sin embargo, ten en cuenta que las fórmulas no están soportadas por la función collection.query(), ni en el parámetro queryString ni como parámetro objeto formula.

.reduce()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
initValueText, Number, Object, Collection, Date, Boolean->Colección que contiene los elementos añadidos
paramexpresión->Parámetro(s) a pasar
ResultadoText, Number, Object, Collection, Date, Boolean<-donde:

Descripción

La función .reduce() aplica la retrollamada formula o methodName a un acumulador y cada elemento de la colección (de izquierda a derecha) para reducirlo a un único valor.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

Tipo

Puede pasar el valor para inicializar el acumulador en initValue. Si se omite, $1.accumulator empieza por Undefined.

La retrollamada recibe los siguientes parámetros:

  • La nueva colección
  • Se puede insertar cualquier tipo de elemento aceptado por una colección, incluso otra colección.
  • Esta función modifica la colección original.

La retrollamada define los siguientes parámetros:

  • Descripción
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo 1

var $c : Collection
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduce(Formula($1.accumulator*=$1.value); 1) //devuelve 86400

Ejemplo 2

Este ejemplo permite reducir varios elementos de la colección a uno solo:

 var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduce(Formula(Flatten)) //$r=[0,1,2,3,4,5,6,7]

Con el siguiente método Flatten:

 If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)

.reduceRight()

Historia
LanzamientoModificaciones
20Añadidos

.reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
initValueText, Number, Object, Collection, Date, Boolean->Colección que contiene los elementos añadidos
paramexpresión->Parámetro(s) a pasar
ResultadoText, Number, Object, Collection, Date, Boolean<-donde:

Descripción

La función .reduceRight() aplica la retrollamada formula o methodName contra un acumulador y cada elemento de la colección (de derecha a izquierda) para reducirlo a un único valor.

Esta función no modifica la colección original.

Se designa la retrollamada a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

Tipo

Puede pasar el valor para inicializar el acumulador en initValue. Si se omite, $1.accumulator empieza por Undefined.

La retrollamada recibe los siguientes parámetros:

  • La nueva colección
  • Se puede insertar cualquier tipo de elemento aceptado por una colección, incluso otra colección.
  • Esta función modifica la colección original.

La retrollamada define los siguientes parámetros:

  • Descripción
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Ejemplo 1

Tipo

Ejemplo 2

Este ejemplo permite reducir varios elementos de la colección a uno solo:

 var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduceRight(Formula(Flatten)) //$r=[6,7,4,5,2,3,0,1]

Con el siguiente método Flatten:

Ejemplo 4

.remove()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.remove( index : Integer { ; howMany : Integer } ) : Collection

ParámetrosTipoDescripción
indexInteger->Elemento en el que se inicia la eliminación
howManyInteger->Número de elementos a eliminar, o 1 elemento si se omite
ResultadoCollection<-Modified collection without removed element(s)

Descripción

La función .remove() elimina uno o más elementos a partir de la posición index especificada en la colección y devuelve la colección editada.

Esta función modifica la colección original.

Lanzamiento

Atención: recuerde que los elementos de la colección están numerados desde 0. Si startFrom < 0, se considera el desplazamiento desde el final de la colección (startFrom:=startFrom+length).

  • Si index < 0, se recalcula como index:=index+length (se considera el desplazamiento desde el final de la colección).
  • Lanzamiento
  • Ejemplo 1

En howMany, pase el número de elementos a eliminar de index. Si no se especifica howMany, se elimina un elemento.

Si se intenta eliminar un elemento de una colección vacía, el método no hace nada (no se genera ningún error).

Ejemplo

 var $col : Collection
$col:=New collection("a";"b";"c";"d";"e";"f";"g";"h")
$col.remove(3) // $col=["a","b","c","e","f","g","h"]
$col.remove(3;2) // $col=["a","b","c","g","h"]
$col.remove(-8;1) // $col=["b","c","g","h"]
$col.remove(-3;1) // $col=["b","g","h"]

.resize()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.resize( size : Integer { ; defaultValue : any } ) : Collection

ParámetrosTipoDescripción
sizeInteger->Nuevo tamaño de la colección
defaultValueNumber, Text, Object, Collection, Date, Boolean->Valor por defecto para llenar nuevos elementos
ResultadoCollection<-o methodName, el nombre de un método proyecto (texto).

Descripción

La función .resize() ajusta la longitud de la colección al nuevo tamaño especificado y devuelve la colección redimensionada.

Esta función modifica la colección original.

  • Ejemplo 1
  • Ejemplo 1

Por defecto, los nuevos elementos se llenan con valores null. Puede especificar el valor a llenar en los elementos añadidos utilizando el parámetro defaultValue.

Ejemplo

 var $c : Collection
$c:=New collection
$c.resize(10) // $c=[null,null,null,null,null,null,null,null,null,null]

$c:=New collection
$c.resize(10;0) // $c=[0,0,0,0,0,0,0,0,0,0]

$c:=New collection(1;2;3;4;5)
$c.resize(10;New object("name";"X")) //$c=[1,2,3,4,5,{name:X},{name:X},{name:X},{name:X},{name:X}]

$c:=New collection(1;2;3;4;5)
$c.resize(2) //$c=[1,2]

.reverse()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.reverse( ) : Collection

ParámetrosTipoDescripción
ResultadoCollection<-(obligatorio si se ha utilizado un método) $1.result (booleano): true si la evaluación del valor del elemento tiene éxito, false en caso contrario.

Descripción

La función .reverse() devuelve una copia profunda de la colección con todos sus elementos en orden inverso. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

Ejemplo

 var $c; $c2 : Collection
$c:=New collection(1;3;5;2;4;6)
$c2:=$c.reverse() //$c2=[6,4,2,5,3,1]

.shift()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.shift() : any

ParámetrosTipoDescripción
Resultadoany<-Primer elemento de la colección

Descripción

La función .shift() elimina el primer elemento de la colección y lo devuelve como resultado de la función.

Esta función modifica la colección original.

Si la colección está vacía, este método no hace nada.

Ejemplo

 var $c : Collection
var $val : Variant
$c:=New collection(1;2;4;5;6;7;8)
$val:=$c.shift()
// $val=1
// $c=[2,4,5,6,7,8]

.slice()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.slice( startFrom : Integer { ; end : Integer } ) : Collection

ParámetrosTipoDescripción
startFromInteger->Índice de inicio (incluido)
endInteger->Índice final (no incluido)
ResultadoCollection<-Resultado

Descripción

La función .slice() devuelve una parte de una colección en una nueva colección, seleccionada de la posición startFrom a la posición end (no incluye end). Esta función devuelve una copia superficial de la colección. Si la colección original es una colección compartida, la colección devuelta es también una colección compartida.

Esta función no modifica la colección original.

La colección devuelta contiene el elemento especificado por startFrom y todos los elementos subsiguientes hasta, pero sin incluir, el elemento especificado por end. Si sólo se especifica el parámetro startFrom, la colección devuelta contiene todos los elementos desde startFrom hasta el último elemento de la colección original.

  • Si startFrom < 0, se recalcula como startFrom:=startFrom+length (se considera el desplazamiento desde el final de la colección).
  • Descripción
  • Si end < 0 , se recalcula como end:=end+length.
  • Este ejemplo permite reducir varios elementos de la colección a uno solo:

Ejemplo

 var $c; $nc : Collection
$c:=New collection(1;2;3;4;5)
$nc:=$c.slice(0;3) //$nc=[1,2,3]
$nc:=$c.slice(3) //$nc=[4,5]
$nc:=$c.slice(1;-1) //$nc=[2,3,4]
$nc:=$c.slice(-3;-2) //$nc=[3]

.some()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean

ParámetrosTipoDescripción

|startFrom |Integer |->|Índice para comenzar la prueba| |formula|4D.Function|->|Objeto fórmula| |methodName|Text|->|Nombre de un método| |param |any |->|Parámetro(s) a pasar| |Result|Boolean|<-|True si al menos un elemento pasa exitosamente la prueba|

Descripción

Lanzamiento

Se designa el código 4D de retrollamada (callback) a ejecutar para evaluar los elementos de la colección utilizando:

  • formula (sintaxis recomendada), un objeto Fórmula que puede encapsular toda expresión ejecutable, incluyendo funciones y métodos proyecto;
  • o methodName, el nombre de un método proyecto (texto).

La retrollamada se llama con los parámetros pasados en param (opcional). La retrollamada puede efecturar toda prueba, con o sin los parámetros, y debe devolver true para cada elemento que cumpla la prueba. Recibe un Object en el primer parámetro ($1).

La retrollamada recibe los siguientes parámetros:

  • La nueva colección
  • Se puede insertar cualquier tipo de elemento aceptado por una colección, incluso otra colección.
  • Esta función modifica la colección original.

Puede definir los siguientes parámetros:

  • Expresión a buscar en la colección
  • $1.stop (boolean, opcional): true para detener la retrollamada del método. El valor devuelto es el último calculado.

Descripción

Por defecto, .some() comprueba toda la colección. Opcionalmente, puede pasar el índice de un elemento desde el cual iniciar la prueba en startFrom.

  • Tipo

  • Añadidos

  • Si startFrom = 0, se busca en toda la colección (por defecto).

Ejemplo

Soporte de fórmula

 var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) // $b=false
$c.push(1)
$b:=$c.some(Formula($1.value>0)) // $b=true

$c:=New collection
$c.push(1;-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) //$b=true
$b:=$c.some(1;Formula($1.value>0)) //$b=false

.sort()

Historia
LanzamientoModificaciones
19 R6Soporte de fórmula
v16 R6Añadidos

.sort() : Collection
.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

ParámetrosTipoDescripción
formula4D.Function->Objeto fórmula
methodNameText->Nombre de un método
extraParamany->Parámetros del método
ResultadoCollection<-La nueva colección

Descripción

La función .sort() ordena los elementos de la colección original y además devuelve la colección ordenada.

Esta función modifica la colección original.

Si se llama a .sort() sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después.

  1. null
  2. booleans
  3. cadenas
  4. numbers
  5. objects
  6. collections
  7. dates

Si quiere ordenar los elementos de la colección en algún otro orden o ordenar cualquier tipo de elemento, debe suministrar en formula (objeto Formula) o methodName (Text) una retro llamada que define el orden de clasificación. El valor de retorno debe ser un booleano que indica el orden relativo de los dos elementos: True si $1.value es menor que $1.value2, False si $1.value es mayor que $1.value2. Puede ofrecer parámetros adicionales a la retrollamada si es necesario.

La retrollamada recibe los siguientes parámetros:

  • $1 (objeto), donde:
  • $1.value (todo tipo): valor del primer elemento a comparar
  • $1.value2 (todo tipo): valor del segundo elemento a comparar
  • $2...$N (cualquier tipo): parámetros adicionales

Resultado

  • Elemento a insertar en la colección

Ejemplo 1

 var $col; $col2 : Collection
$col:=New collection("Tom";5;"Mary";3;"Henry";1;"Jane";4;"Artie";6;"Chip";2)
$col2:=$col.sort() // $col2=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]
// $col=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]

Ejemplo 2

 var $col; $col2 : Collection
$col:=New collection(10;20)
$col2:=$col.push(5;3;1;4;6;2).sort() //$col2=[1,2,3,4,5,6,10,20]

Ejemplo 3

Descripción

.sum()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.sum( { propertyPath : Text } ) : Real

ParámetrosTipoDescripción
propertyPathText->Ruta de la propiedad del objeto que se utilizará para el cálculo
ResultadoReal<-.pop(), utilizado junto con .push(), puede utilizarse para implementar una funcionalidad primera entrada última salida de tratamiento de datos apilados:

Descripción

La función .sum() devuelve la suma de todos los valores de la instancia de la colección.

Para el cálculo sólo se tienen en cuenta los elementos numéricos (se ignoran otros tipos de elementos).

Si la colección contiene objetos, pasa el parámetro propertyPath para indicar la propiedad del objeto a tener en cuenta.

Esta función no modifica la colección original.

  • la colección está vacía,
  • la colección no contiene elementos numéricos,
  • propertyPath no se encuentra en la colección.

Ejemplo 1

 var $col : Collection
var $vSum : Real
$col:=New collection(10;20;"Monday";True;2)
$vSum:=$col.sum() //32

Ejemplo 2

 var $col : Collection
var $vSum : Real
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500,5))
$vSum:=$col.sum("salary") //$vSum=70500,5

.unshift()

Historia
LanzamientoModificaciones
v16 R6Añadidos

.unshift( value : any { ;...valueN : any } ) : Collection

ParámetrosTipoDescripción
valueText, Number, Object, Collection, Date->Valor(es) a insertar al principio de la colección
ResultadoReal<-Colección que contiene los elementos añadidos

Descripción

La función .unshift() inserta el valor(es) dado al principio de la colección y devuelve la colección modificada.

Esta función modifica la colección original.

Si se pasan varios valores, se insertan todos a la vez, lo que significa que aparecen en la colección resultante en el mismo orden que en la lista de argumentos.

Ejemplo

 var $c : Collection
$c:=New collection(1;2)
$c.unshift(4) // $c=[4,1,2]
$c.unshift(5) //$c=[5,4,1,2]
$c.unshift(6;7) // $c=[6,7,5,4,1,2]