Skip to content

reduce — GTM Variable Template for Array

VARIABLES › ARRAY
reduce EXTENDED Array

Reduces an array to a single value using a callback function and an optional initial value.



Examples

Sum numbers
INPUT
Array To Reduce: [1, 2, 3, 4, 5]
Reducer Function: function(acc, val) { return acc + val; }
Initial Value: 0
Use Initial Value: true
OUTPUT
15
Concatenate strings
INPUT
Array To Reduce: ['hello', ' ', 'world']
Reducer Function: function(acc, val) { return acc + val; }
Initial Value:
Use Initial Value: true
OUTPUT
hello world

GTM Configuration

This is what you'll see when you open this variable in Google Tag Manager. Hover the icons for details.

reduce
Array To Reduce
💾 The array to reduce to a single value.

Supported formats:
  ✓ Array
Reducer Function
💾 A reducer function of the form (accumulator, currentValue) => nextAccumulator.

Supported formats:
  ✓ Function
Initial Value
💾 An optional initial value for the accumulator.

Supported formats:
  ✓ Any
Use Initial Value
💾 Whether to use the initial value.

Options:
  ✓ Yes/No
Input Setup
Input Function (optional)
⚙️ Optional pre-processing function applied to the array before internal logic (e.g., filter elements, sort array). Internal transformations will still apply afterward.
Result Handling
Output Function (optional)
⚙️ Optional function to apply to the result before returning it (e.g., val => Math.round(val), val => val.toString() for string conversion). Useful for chaining transformations on the output.
Array To Reduce array
💡 Type any text to see the result update live
🎯 Using special value — click input to type instead
Test with:
Falsy
Truthy
Reducer Function function
Initial Value any
reduce()


Under the Hood

📜 View Implementation Code
/**
 * Reduces an array to a single value using a callback function and an optional initial value.
 *
 * @param {Array} data.arr - The array to reduce.
 * @param {Function} data.fnc - A reducer function of the form (accumulator, currentValue) => nextAccumulator.
 * @param {*} data.ini - An optional initial value for the accumulator.
 * @param {boolean} data.use - Whether to use the initial value.
 * @param {Function|string} [data.out] - Optional output handler: function to transform result or string with format.
 *
 * Direct-mode specific parameters:
 * @param {Function} [data.pre] - Optional pre-processor function to transform arr before reducing.
 * 
 * @returns {*|undefined} The final accumulated result from the reduce operation. Returns undefined if the input is not a valid array or the callback is not a function.
 *
 * @framework ggLowCodeGTMKit
 */
const getType = require('getType');
const reduce = function(array, callback, initialValue, useInitial) {
    if (getType(array) !== 'array' || typeof callback !== 'function') {
        return undefined;
    }
    return useInitial ? array.reduce(callback, initialValue) : array.reduce(callback);
};
const safeFunction = fn => typeof fn === 'function' ? fn : x => x;
const out = safeFunction(data.out);
// ===============================================================================
// reduce - Direct mode
// ===============================================================================
const applyCast = (castFn, value) => safeFunction(castFn)(value);
const processedArray = applyCast(data.pre, data.arr);
return out(reduce(processedArray, data.fnc, data.ini, data.use));
// ===============================================================================
// reduce(...) – Apply Mode
// ===============================================================================
/*
return function(array, callback, initialValue, useInitial) {
   callback = data.rp1 ? data.fnc : callback;
   initialValue = data.rp2 ? data.ini : initialValue;
   useInitial = data.rp3 ? data.use : useInitial;
   return out(reduce(array, callback, initialValue, useInitial));
};
*/
🧪 View Test Scenarios (12 tests)
✅ '[example] Sum numbers'
✅ Sum of numbers without initial value - should return sum
✅ Product of numbers with initial value - should return product
✅ '[example] Concatenate strings'
✅ Build object from array with initial value - should return object
✅ Flatten nested arrays with initial value - should return flat array
✅ Single element array with initial value - should return combined result
✅ Single element array without initial value - should return the element
✅ Empty array with initial value - should return initial value
✅ Non-array input - should return undefined
✅ Non-function callback - should return undefined
✅ Find maximum value with initial value - should return max