packages/twenty-docs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
When working with arrays in Code actions, you may encounter two common challenges:
Both can be solved with a Code node.
Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
Solution: Add this pattern at the start of your Code action:
export const main = async (params: {
users: any;
}): Promise<object> => {
const { users } = params;
// Handle input that may come as a string or an array
const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
// Now you can safely work with usersFormatted as an array
return {
users: usersFormatted.map((user) => ({
...user,
activityStatus: String(user.activityStatus).toUpperCase(),
})),
};
};
The key line typeof users === "string" ? JSON.parse(users) : users checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
A webhook might return an array like answers: [...], but in subsequent workflow steps you can only select the entire array — not individual items within it.
Solution: Add a Code node to extract specific fields and return them as a structured object:
export const main = async (params: {
answers: any;
}): Promise<object> => {
const { answers } = params;
// Handle input that may come as a string or an array
const answersFormatted = typeof answers === "string"
? JSON.parse(answers)
: answers;
// Extract specific fields from the array
const firstname = answersFormatted[0]?.text || "";
const name = answersFormatted[1]?.text || "";
return {
answer: {
firstname,
name
}
};
};
The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like answer.firstname and answer.name from the variable picker.