Array Methods
Array prototype methods available in SSJS — which work natively, which need polyfills, and safe ES3/ES5 alternatives for missing methods.
Modifying Arrays
push / pop
var arr = [1, 2, 3];
arr.push(4); // [1, 2, 3, 4]
var last = arr.pop(); // 4, arr = [1, 2, 3]
shift / unshift
var arr = [1, 2, 3];
var first = arr.shift(); // 1, arr = [2, 3]
arr.unshift(0); // arr = [0, 2, 3]
splice
var arr = ["a", "b", "c", "d"];
// Remove 1 element at index 1
arr.splice(1, 1); // ["a", "c", "d"]
// Replace element
arr.splice(1, 1, "X"); // ["a", "X", "d"]
// Insert without removing
arr.splice(1, 0, "B"); // ["a", "B", "X", "d"]
reverse / sort
var arr = [3, 1, 4, 1, 5, 9];
arr.sort(function(a, b) { return a - b; }); // ascending
arr.reverse(); // descending
Reading Arrays
slice
var arr = [0, 1, 2, 3, 4];
arr.slice(1, 3); // [1, 2]
arr.slice(-2); // [3, 4]
arr.slice(); // copy of arr
join
var parts = ["Hello", "World"];
parts.join(", "); // "Hello, World"
parts.join(""); // "HelloWorld"
parts.join(" / "); // "Hello / World"
indexOf (may need polyfill)
var arr = ["a", "b", "c"];
arr.indexOf("b"); // 1
arr.indexOf("z"); // -1
Array.prototype.indexOf may not be available without a polyfill. Add it if you rely on it. See Polyfills.
Iteration (Use for loops)
In SSJS, forEach, map, filter, reduce, some, and every are not available. Use for loops instead.
forEach equivalent
// Instead of: arr.forEach(function(item) { ... })
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
// process item
}
map equivalent
// Instead of: var doubled = arr.map(function(x) { return x * 2; })
var doubled = [];
for (var i = 0; i < arr.length; i++) {
doubled.push(arr[i] * 2);
}
filter equivalent
// Instead of: var evens = arr.filter(function(x) { return x % 2 === 0; })
var evens = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 0) {
evens.push(arr[i]);
}
}
reduce equivalent
// Instead of: var sum = arr.reduce(function(acc, x) { return acc + x; }, 0)
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
find equivalent
// Instead of: var found = arr.find(function(x) { return x.id === targetId; })
var found = null;
for (var i = 0; i < arr.length; i++) {
if (arr[i].id === targetId) {
found = arr[i];
break;
}
}
some/every equivalent
// Instead of: arr.some(function(x) { return x > 10; })
var hasLarge = false;
for (var i = 0; i < arr.length; i++) {
if (arr[i] > 10) { hasLarge = true; break; }
}
// Instead of: arr.every(function(x) { return x > 0; })
var allPositive = true;
for (var i = 0; i < arr.length; i++) {
if (arr[i] <= 0) { allPositive = false; break; }
}
Array.isArray
Array.isArray() is not available. Use this pattern:
function isArray(val) {
return val !== null && typeof val === "object" && typeof val.length === "number";
}
Flattening / Concatenation
Array.prototype.flat() and Array.prototype.flatMap() are ES6+ and not available. Use:
// Concat arrays
var combined = arr1.concat(arr2);
// Manual flatten (one level)
function flatten(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] === "object" && arr[i].length !== undefined) {
for (var j = 0; j < arr[i].length; j++) {
result.push(arr[i][j]);
}
} else {
result.push(arr[i]);
}
}
return result;
}