Cheat sheet - JS code snippets
Checking duplicates in an array
// Method 1
function distinct(array) {
const a = [];
for (let i = 0, l = array.length; i < l; i++) {
if (a.indexOf(array[i]) === -1) a.push(array[i]);
}
return a;
}
// Method 2
function hasDuplicates(array) {
const valuesSoFar = Object.create(null);
for (let i = 0; i < array.length; i++) {
const value = array[i];
if (value in valuesSoFar) return true;
valuesSoFar[value] = true;
}
return false;
}Removing empty values from an array
const newArr = arr.filter(el => !!el);Checking duplicates in a JSON object
const listaGrupBezDuplikatow = listaGrup.filter((thing, index, self) =>
index === self.findIndex(t => JSON.stringify(t) === JSON.stringify(thing))
);Checking if an array contains an element
if (tablica.indexOf(element) !== -1) {
return [{ output: "true" }];
} else {
return [{ output: "false" }];
}Extracting data from a timestamp
const dataUrodzenia = context.getFirstParameter("dataUrodzenia");
let data = parseInt(dataUrodzenia);
data = new Date(data);
const rok = data.getFullYear();
const miesiac = data.getMonth() + 1;
const dzien = data.getDate();Getting today's date
const dateNow = new Date();
const today = `${dateNow.getFullYear()}-${(dateNow.getMonth() + 1)
.toString()
.padStart(2, "0")}-${dateNow.getDate().toString().padStart(2, "0")}`; Extracting file names from the UploadFile component
const nazwy = JSON.parse(context.getFirstParameter("zalaczniki"));
const gotowaLista = nazwy.toString(); Getting the value of a specific component attribute
const nazwy = context.getData("@GesUploadFile1", "fileNames");
const rozmiary = context.getData("@GesUploadFile1", "totalFilesSize");Removing spaces
let value = context.getFirstParameter("value");
value = value.replace(/\s+/g, "");Matching a value to a mask (regex)
const input = context.getFirstParameter("dokumentTozsamosci");
const regex = /^[a-zA-Z]{3}[0-9]{6}$/;
if (!input.match(regex)) {
context.log().info("Invalid ID card number");
} else {
return [];
}Counting occurrences of a given value
const input = context.getParameters("input");
let trueOccurences = 0;
for (let i = 0; i < input.size(); i++) {
if (input.get(i) === "true") {
trueOccurences++;
}
} Checking how many full years have passed
let dataUrodzenia = context.getFirstParameter("dataUrodzenia");
if (dataUrodzenia !== "" && dataUrodzenia !== null) {
let data = parseInt(dataUrodzenia);
dataUrodzenia = new Date(data);
dataUrodzenia.setHours(12, 0, 0, 0);
const todayDate = new Date();
todayDate.setHours(12, 0, 0, 0);
const difference = todayDate.getTime() - dataUrodzenia.getTime();
const ageDate = new Date(difference);
if (Math.abs(ageDate.getUTCFullYear() - 1970) >= 18) {
context.log().info("At least 18 years have passed");
} else {
context.log().info("18 years have not passed");
}
} else {
return [];
}Retrieving data from a repeatable section
const pesel = context.getParameters("pesel").toArray();
const data = context.getParameters("dataUrodzenia").toArray();
let index = 0;
while (index < 30) {
const idObywatelstwo =
"GesComplexComponent2.GesComplexComponent3.GesRepeatableSection2.row" +
index +
".GesComplexComponent2.GesComplexComponent3.GesComplexComponent1.GesCombobox2";
const ob = context.getData(idObywatelstwo, "label");
const idImie =
"GesComplexComponent2.GesComplexComponent3.GesRepeatableSection2.row" +
index +
".GesComplexComponent2.GesComplexComponent3.GesComplexComponent1.GesTextField1";
const im = context.getData(idImie, "value");
const isRowVisible = context.isVisible(
"GesComplexComponent2.GesComplexComponent3.GesRepeatableSection2.row" +
index +
".GesComplexComponent2.GesComplexComponent3.GesComplexComponent1.GesCombobox2"
);
if (isRowVisible && im) {
obywatelstwoList.push(ob);
stanCywilnyList.push(sc);
rodzajDokumentuList.push(rd);
}
index++;
}Calling ServiceProxy
const input = context.getInputParameters();
let result = context.callService("Plus500ZusAdditionalValueServiceProxy", input);
let parsedResult = JSON.parse(result);
result = result.get(0).get("result");
parsedResult = JSON.parse(result);Creating a dictionary
const items = {
"Identity card": "DO",
"Polish passport": "PP",
"Foreign passport": "PZ",
};
function DictElement(label, value) {
this.label = label;
this.value = value;
}
const dict = [];
for (const item in items) {
dict.push(new DictElement(item, items[item]));
}
return dict;Formatting floating point numbers
function format(interest) {
return parseFloat(interest)
.toFixed(2)
.replace(".", ",")
.replace(/(?!^)(?=(?:\d{3})+(?:,|$))/gm, " ");
}Returning the day/month/year suffix
function formatDate(unit, quantity) {
let literal = "dni";
if (unit === "DAY") {
literal = quantity === 1 ? "dzień" : "dni";
}
if (unit === "MONTH") {
if (quantity === 1) {
literal = "miesiąc";
} else if (
quantity < 5 ||
(quantity > 20 &&
["2", "3", "4"].includes(String(quantity).slice(-1)))
) {
literal = "miesiące";
} else {
literal = "miesięcy";
}
}
if (unit === "YEAR") {
if (quantity === 1) {
literal = "rok";
} else if (
quantity < 5 ||
(quantity > 20 &&
["2", "3", "4"].includes(String(quantity).slice(-1)))
) {
literal = "lata";
} else {
literal = "lat";
}
}
return literal;
}Creating an array from a list of objects
const gotowaListaSchematow = listaSchematowBezDuplikatow.map(
a => a.schemaId
);Filtering an array
function callService(context) {
let data = '[{"name":"Jan","lastname":"Kowalski","role":"admin"},{"name":"Adam","lastname":"Pietrzak","role":"user"},{"name":"Karol","lastname":"Kowalski","role":"admin"},{"name":"Joanna","lastname":"Wieczorek","role":"user"}]';
data = JSON.parse(data);
data = data.filter(element => element.role === "user");
return [{ selectedUsersFullListEnd: JSON.stringify(data) }];
}Removing selected object parameters
// Method 1
function callService(context) {
let data = '[{"name":"Jan","lastname":"Kowalski","role":"admin"},{"name":"Adam","lastname":"Pietrzak","role":"user"},{"name":"Karol","lastname":"Kowalski","role":"admin"},{"name":"Joanna","lastname":"Wieczorek","role":"user"}]';
data = JSON.parse(data);
data = data.map(element => {
delete element.role;
return element;
});
return [{ selectedUsersFullListEnd: JSON.stringify(data) }];
}
// Method 2
function callService(context) {
let data = '[{"name":"Jan","lastname":"Kowalski","role":"admin"},{"name":"Adam","lastname":"Pietrzak","role":"user"},{"name":"Karol","lastname":"Kowalski","role":"admin"},{"name":"Joanna","lastname":"Wieczorek","role":"user"}]';
data = JSON.parse(data);
for (const element of data) {
delete element.role;
}
return [{ selectedUsersFullListEnd: JSON.stringify(data) }];
}Removing duplicates from an array using Set
Set// Values to array
const accountPermissionArr = accountPermissionInput.toArray();
// Set removes duplicates (in JS it preserves insertion order)
const accountPermissionSet = new Set(accountPermissionArr);
// Convert the Set object back to an array
const accountPermissionFinal = Array.from(accountPermissionSet);
// (optionally) if you want to sort the result alphabetically:
// const accountPermissionFinal = Array.from(accountPermissionSet).sort();Getting values using inputParameters
inputParametersfunction getSingleValue(valuesMap, paramName, defaultValue) {
const values = valuesMap.get(paramName);
if (values != null && !values.isEmpty() && values.get(0) != null) {
if (values.size() > 1) {
throw new Error(paramName + " must have single value");
} else {
return values.get(0);
}
} else {
return defaultValue;
}
}
function getBooleanValue(valuesMap, paramName, defaultValue) {
const value = getSingleValue(valuesMap, paramName, defaultValue);
return value === true || value === "1" || value === "true";
}
// Usage
const inputParameters = context.getInputParameters();
const onlyVATAccounts = getBooleanValue(inputParameters, "inputOptionalOnlyVATAccounts", false);
const companyNik = getSingleValue(inputParameters, "inputOptionalCompanyNik", null);Creating a BigDecimal and useful utilities
const bigDecimalZero = BigDecimal.valueOf("0").bigDecimal;
function createBigDecimal(value, locale) {
if (!value) {
return value;
}
let formatValue;
if (locale === "en") {
formatValue = value.toString().replace(/,/g, "");
} else if (locale === "es") {
formatValue = value.toString().replace(/\./g, "").replace(/,/g, ".");
} else {
// default: remove whitespace and replace comma with dot
formatValue = value.toString().replace(/\s+/g, "").replace(",", ".");
}
return BigDecimal.valueOf(formatValue).bigDecimal;
}
function createBigDecimalOrZero(value, locale) {
return !value ? bigDecimalZero : createBigDecimal(value, locale);
}
function createBigDecimalOrNull(value, locale) {
return !value ? null : createBigDecimal(value, locale);
}Formatting account balance
const UNBREAKABLE_SPACE = "\u00A0";
function formatAmount(number, locale) {
const GROUPING_SIZE_OF_BALANCE = 3;
const NUMBER_OF_FRACTION_DIGITS_IN_BALANCE = 2;
const localeSettings = {
en: { groupingSeparator: ",", decimalSeparator: "." },
pl: { groupingSeparator: UNBREAKABLE_SPACE, decimalSeparator: "," },
es: { groupingSeparator: ".", decimalSeparator: "," },
};
// allow 0, reject null/undefined
if (number === null || number === undefined) {
return "";
}
const settings = localeSettings[locale] || localeSettings.pl;
const roundedNumber = Number(number).toFixed(NUMBER_OF_FRACTION_DIGITS_IN_BALANCE);
const parts = roundedNumber.split(".");
let integerPart = parts[0];
const decimalPart = parts[1];
const regex = new RegExp(`\\B(?=(\\d{${GROUPING_SIZE_OF_BALANCE}})+(?!\\d))`, "g");
integerPart = integerPart.replace(regex, settings.groupingSeparator);
return integerPart + settings.decimalSeparator + decimalPart;
}
function getAccountBalanceFormatted(loan, locale) {
return (
formatAmount(loan.availableFunds, locale) +
UNBREAKABLE_SPACE +
loan.currencyCode
);
}
// Returns e.g.: "79 561,00 PLN" (PL) or "79,561.00 USD" (EN)
function formatAmountNeutral(value) {
const formatNeutral = DecimalFormat.of("0.00", DecimalFormatSymbols.EN);
return value !== null && value !== undefined
? formatNeutral.format(BigDecimal.valueOf(value.toString()))
: "";
}
// Returns neutral format (EN) e.g.: "79561.00"PreviousExternal materials - JavaScriptNextExpression language for defining conditions (conditions with getValue)
Last updated
Was this helpful?
