Lokale Ausdrücke
JavaScript, das in der Sandbox des Browsers läuft
- Namenskonvention
- Berechnung
- Umrechnungen
- Ein Array von Objekten in eine HTML-Tabelle umwandeln
- Einen Namen mit fortlaufender Nummerierung ermitteln
- Arrays von Objekten bearbeiten
- Arrays von Objekten mit reinem JavaScript bearbeiten
Die folgenden Beispiele laufen mit der Feldeigenschaft runLocal: true.
Sie werden in der Sandbox des Browsers ausgeführt und können die volle JavaScript-Engine nutzen.
Tipp: Verwenden Sie den Typ
localals Alias fürtype: expression, runLocal: true, hide: true, output: false
Tipp: Verwenden Sie den Typlocal_outals Alias fürtype: expression, runLocal: true, hide: true
Namenskonvention
Wenden Sie Namenskonventionen mit Zeichenkettenoperationen an.
'$(field1) $(field2)'.replace('-','_').toUpperCase()
Berechnung
Rechnen Sie mit mathematischen Funktionen.
Math.round($(field1)*$(field2)*Math.PI) // Math.round and Math.PI are native javascript
Umrechnungen
Bytes in Gigabytes umrechnen.
($(size_bytes)/1024/1024/1024).toFixed(2) // toFixed is native javascript method
Ein Array von Objekten in eine HTML-Tabelle umwandeln
Machen Sie aus einem Array von Objekten, etwa aus einem anderen Feld, eine HTML-Tabelle für ein html-Feld:
fnToTable($(my_array_field),{
tableClass: '',
escapeHtml: true,
emptyCell: '',
includeHeader: true
})
// output : an html-table representation of the array of objects taken from another field called "my_array_field"
// tip : add tableClass: 'table table-striped table-bordered' for bootstrap styling
Einen Namen mit fortlaufender Nummerierung ermitteln
Bei automatischer Nummerierung müssen Sie eventuell den nächsten Namen in einem Array nummerierter Zeichenketten finden.
Diese Funktion gibt es auch als serverseitigen Ausdruck (mit dem Präfix fn.).
fnGetNumberedName(['server001','server002','server005'],'server###','server001',false)
// result : "server006"
fnGetNumberedName(['server001','server002','server005'],'server###','server001',true)
// result : "server003"
fnGetNumberedName($(fieldlist),'server###','server001',true)
// use another expression field as input for the array
// fnGetNumberedName(array,pattern,default,fillgaps)
// This function searches for a numbered pattern in a list of string,
// increases the highest number and returns a name like the pattern
// - array : an array object, you can use a placeholder to an expression where you know it's an array
// - pattern : a string that hold the # as a digit
// - default : if no value is found, return this default
// - fillgaps : a boolean to indicate it can fill gaps in the numbers, 1,2,3,6 => 4
Ist das erste Argument kein Array, gibt die lokale Funktion den Standardwert zurück. Die Serverfunktion fn.fnGetNumberedName schlägt stattdessen mit einem Fehler fehl.
Arrays von Objekten bearbeiten
Arrays von Objekten müssen oft gefiltert, verändert und sortiert werden.
AnsibleForms bringt einen eigenen Helfer mit, der diesen Code kurz hält.
/*
fnArray.from($(your_array_field)) // custom helper library
.filterBy({property1:'value1',property2:'value2', ...}) // filters by property value (a string, * wildcards allowed)
.regexBy({property1:'regex1',property2:'regex2', ...}) // filters the array by property matched against regex
.distinctBy('property1','property2', ...) // will make the array entries unique by property
.selectAttr({prop1:'property1',prop2:'property2'}) // only selects a certain property, and you can relabel them
.sortBy('property1','-property2', ...) // will order the array. To have descending add a "-" (minus) before the property
mylist:
[
{
name:'Spiderman',
has_ability: true,
ability: 'Can do whatever a spider can'
},
{
name:'Superman',
has_ability: true,
ability: 'Superstrong,Flying,Laserbeams'
},
{
name:'FamilyGuy',
has_ability: false
},
{
name:'Wolverine',
has_ability: true,
ability: 'Enhanced healing'
}
]
*/
fnArray.from($(mylist)) // take data from another field 'mylist'
.regexBy({name:'.*man$'}) // name must end with 'man'
.filterBy({has_ability:'true'}) // must have abilities (a string: 'true', not true)
.selectAttr({name:'name',ability:'ability'}) // only take properties name and ability
.sortBy('-name') // sort by name descending
/*
result :
[
{name:'Superman',ability:'Superstrong,Flying,Laserbeams'},
{name:'Spiderman',ability:'Can do whatever a spider can'}
]
*/
Arrays von Objekten mit reinem JavaScript bearbeiten
Alle Standardmethoden für Arrays in JavaScript stehen weiterhin zur Verfügung, um Ihre Daten zu filtern und zu verändern, etwa map, forEach, find, filter und reduce.
// source : https://medium.com/@jeff_long/understanding-foreach-map-filter-and-find-in-javascript-f91da93b9f2c
mylist=
[
{
name:'Bob',
age: 5
},
{
name:'Tom',
age: 10
},
{
name:'Paul',
age: 30
},
{
name:'Tom',
age: 40
}
]
// simple filter
$(mylist).filter((x) => x.age<=20) // filter age<=20
/* result:
[
{name:'Bob',age:5},
{name:'Tom',age:10}
]
*/
// filter and addition
$(mylist)
.filter((x) => x.age<=20) // filter age<=20
.map((x) => { return {...x,diff:20-x.age} }) // add new property diff
/* result:
[
{name:'Bob',age:5,diff:15},
{name:'Tom',age:10,diff:10}
]
*/
// find
$(mylist).find((x) => x.name=='Tom').age // find age of first Tom
// result: 10
// make sum with reduce
$(mylist).reduce((sum,x) => sum+x.age,0) // calculate sum of ages
// result: 85
// make temp function
((arr,min)=>{
return arr
.filter(x => x.age>=min) // filter
.map(x => {
var preview=`${x.name} (${x.age})`; // make preview string
return {...x,preview:preview} }) // add new preview property
})($(mylist),20) // feed function with mylist and 20
/* result:
[
{name:'Paul',age:30,preview:'Paul (30)'},
{name:'Tom',age:40,preview:'Tom (40)'}
]
*/