We’re trying to sort content to recommend to a person using scores. I want to return the URL slugs (that present the slug) in order of the highest score for each contact_id
I’ve got a Loop in my Zap to fetch the relevant scores for each Slug line item. I’m not sure how best to push this to Storage with one key (the contact_id), multiple slug/scores.
e.g.
contact_id: abcde
Slug: example-slug-a
Score: 56
Slug: example-slug-b
Score: 85
Slug: example-slug-c
Score: 74
I’m then not sure how to get all these entries looped through for each contact (there could be 20-30) and then sort them. There’s an outline here, but it uses alphabetical sorting vs. the idea of a score.
Maybe there’s a hacky way to preprend the score value to slug name then use the same desc logic?
We resolve this by asking ChatGPT + the Zapier docs. It should be much easier to handle arrays!
Create a temporary delimiter between values
Converting the input (Zapier Code data input is always a string, so need to convert to an array)
Run a comparison function of unique values
Write back values to map into our onward tool.
let stringSet = inputData.Playbooks;
console.log(stringSet) // Show the ugly string.let Set = stringSet.split('|||'); // Split out by the temporary delimiter
console.log(Set); // Show the array that's fetched
console.log(Array.isArray(Set)) // Evaluates to true// Suspect each line is one long string still.
console.log(Number.isInteger(Set.score)); // Evaluates to false// JSON.parse() was causing problems. GPT alternative suggestion to turn string into an array.let parsedSet = Set.map(str => {
let obj = {};
str = str.replace(/,$/, '');
let keyValuePairs = str.match(/(\w+):("[^"]+"|\w+)/g);
keyValuePairs.forEach(pair => {
let [key, value] = pair.split(':');
key = key.trim();
value = value.trim();
obj[key] = value.match(/^".*"$/) ? value.slice(1, -1) : Number(value);
});
return obj;
});
console.log(parsedSet);
// Make sure we're only evaluating unique slugs to avoid duplicate entrieslet uniqueSet = [];
let slugMap = {};
for (let item of parsedSet) {
if (!slugMap[item.slug]) {
slugMap[item.slug] = true;
uniqueSet.push(item);
}
}
let sortedSet = uniqueSet.sort((a, b) => b.score - a.score); // Sort the unique set by score
console.log(sortedSet); // Show the output of the whole set.let sortedSlugs = sortedSet.map(item => item.slug);
console.log(sortedSlugs);
output = { sortedSlugs, sortedSet }; // Write the output back to the Zap
We resolve this by asking ChatGPT + the Zapier docs. It should be much easier to handle arrays!
Create a temporary delimiter between values
Converting the input (Zapier Code data input is always a string, so need to convert to an array)
Run a comparison function of unique values
Write back values to map into our onward tool.
let stringSet = inputData.Playbooks;
console.log(stringSet) // Show the ugly string.let Set = stringSet.split('|||'); // Split out by the temporary delimiter
console.log(Set); // Show the array that's fetched
console.log(Array.isArray(Set)) // Evaluates to true// Suspect each line is one long string still.
console.log(Number.isInteger(Set.score)); // Evaluates to false// JSON.parse() was causing problems. GPT alternative suggestion to turn string into an array.let parsedSet = Set.map(str => {
let obj = {};
str = str.replace(/,$/, '');
let keyValuePairs = str.match(/(\w+):("[^"]+"|\w+)/g);
keyValuePairs.forEach(pair => {
let [key, value] = pair.split(':');
key = key.trim();
value = value.trim();
obj[key] = value.match(/^".*"$/) ? value.slice(1, -1) : Number(value);
});
return obj;
});
console.log(parsedSet);
// Make sure we're only evaluating unique slugs to avoid duplicate entrieslet uniqueSet = [];
let slugMap = {};
for (let item of parsedSet) {
if (!slugMap[item.slug]) {
slugMap[item.slug] = true;
uniqueSet.push(item);
}
}
let sortedSet = uniqueSet.sort((a, b) => b.score - a.score); // Sort the unique set by score
console.log(sortedSet); // Show the output of the whole set.let sortedSlugs = sortedSet.map(item => item.slug);
console.log(sortedSlugs);
output = { sortedSlugs, sortedSet }; // Write the output back to the Zap