Skip to main content

Hello all,

I have a table that's filled with (linked) dates. To be able to view all the dates in a list, i've created in the script app a script to give me that list. But, is there a possibilty to sort that list?

Below the code:

 

// Change this name to use a different table
let table = base.getTable("Deadlines");
// Prompt the user to pick a record
// If this script is run from a button field, this will use the button's record instead.
let record = await input.recordAsync('Select a record to use', table);
let Weer = record.getCellValue('NB-Weer - DATE');
let Dag = record.getCellValue('NB-Dagkrant - DATE');
let Pagina = record.getCellValue('NB-1-1 Pagina DATE');

output.markdown(`**NB-Weer:** ${Weer}`);
output.markdown(`**NB-Dagkrant:** ${Dag}`);
output.markdown(`**NB-Dagkrant:** ${Pagina}`);

 

... and the result:

Very much a scripting newbie so any help or pointers very much appreciated!

Allready a big thanks and any help is welcome

I couldn“t test this solution inside Airtable, but in JS I would do this:

Just adding a sorting step after retrieving the values.

And at the end just iterate overthe sorted dates array and output each date.

Hope it works!

// Change this name to use a different table
let table = base.getTable("Deadlines");
// Prompt the user to pick a record
// If this script is run from a button field, this will use the button's record instead.
let record = await input.recordAsync('Select a record to use', table);
let Weer = record.getCellValue('NB-Weer - DATE');
let Dag = record.getCellValue('NB-Dagkrant - DATE');
let Pagina = record.getCellValue('NB-1-1 Pagina DATE');

// Create an array to store the dates
let dates = Weer, Dag, Pagina];

// Filter out empty dates
dates = dates.filter(date => date !== null);

// Sort the dates in descending order
dates.sort((a, b) => b - a);

// Format and output the sorted dates
output.markdown('**Sorted Dates (Newest First):**');
dates.forEach(date => {
output.markdown(`- ${date}`);
});

 


I couldn“t test this solution inside Airtable, but in JS I would do this:

Just adding a sorting step after retrieving the values.

And at the end just iterate overthe sorted dates array and output each date.

Hope it works!

// Change this name to use a different table
let table = base.getTable("Deadlines");
// Prompt the user to pick a record
// If this script is run from a button field, this will use the button's record instead.
let record = await input.recordAsync('Select a record to use', table);
let Weer = record.getCellValue('NB-Weer - DATE');
let Dag = record.getCellValue('NB-Dagkrant - DATE');
let Pagina = record.getCellValue('NB-1-1 Pagina DATE');

// Create an array to store the dates
let dates = Weer, Dag, Pagina];

// Filter out empty dates
dates = dates.filter(date => date !== null);

// Sort the dates in descending order
dates.sort((a, b) => b - a);

// Format and output the sorted dates
output.markdown('**Sorted Dates (Newest First):**');
dates.forEach(date => {
output.markdown(`- ${date}`);
});

 


Hi Alvaro,

Thank you for the quick response, unfortunately it didn't do the trick.
But you have given me an idea to group (array) the dates.

grtz,
Paul


Hi Alvaro,

Thank you for the quick response, unfortunately it didn't do the trick.
But you have given me an idea to group (array) the dates.

grtz,
Paul


That should work

const table=base.getTable('Deadlines')
let record = await input.recordAsync('Select a record to use', table);
const flds=['NB-Weer - DATE','NB-Dagkrant - DATE','NB-1-1 Pagina DATE']
const getData=flds.map(f=>[record?.getCellValue(f),f]).sort().reverse().map(arr=>arr.reverse().join(': '))
output.table(getData)

Hi @Paul_Van_Dooren,

Here's an easy to follow version

// Change this name to use a different table
let table = base.getTable('Deadlines');
// Prompt the user to pick a record
// If this script is run from a button field, this will use the button's record instead.
let record = await input.recordAsync('Select a record to use', table);
let Weer = record.getCellValue('NB-Weer - DATE') || '';
let Dag = record.getCellValue('NB-Dagkrant - DATE') || '';
let Pagina = record.getCellValue('NB-1-1 Pagina DATE') || '';

let dates = [
{ field: 'NB-Weer', value: Weer },
{ field: 'NB-Dagkrant', value: Dag },
{ field: 'NB-1-1 Pagina', value: Pagina },
];

//filter out empty dates (remove if you would prefer empty dates to remain)
dates = dates.filter((f) => f.value);

//sort array of field value objects
dates.sort((a, b) => String(a.value).localeCompare(String(b.value)));

for (let d of dates) {
output.markdown(`**${d.field}** ${d.value}`);
}

-Stephen

 

 


Hi @Paul_Van_Dooren,

Here's an easy to follow version

// Change this name to use a different table
let table = base.getTable('Deadlines');
// Prompt the user to pick a record
// If this script is run from a button field, this will use the button's record instead.
let record = await input.recordAsync('Select a record to use', table);
let Weer = record.getCellValue('NB-Weer - DATE') || '';
let Dag = record.getCellValue('NB-Dagkrant - DATE') || '';
let Pagina = record.getCellValue('NB-1-1 Pagina DATE') || '';

let dates = [
{ field: 'NB-Weer', value: Weer },
{ field: 'NB-Dagkrant', value: Dag },
{ field: 'NB-1-1 Pagina', value: Pagina },
];

//filter out empty dates (remove if you would prefer empty dates to remain)
dates = dates.filter((f) => f.value);

//sort array of field value objects
dates.sort((a, b) => String(a.value).localeCompare(String(b.value)));

for (let d of dates) {
output.markdown(`**${d.field}** ${d.value}`);
}

-Stephen

 

 


Hey Stephen,

Thanks for your effort, unfortunately the sorting didn't work.
But you gave me an idea how to layout the final  view.

greetings,
Paul


That should work

const table=base.getTable('Deadlines')
let record = await input.recordAsync('Select a record to use', table);
const flds=['NB-Weer - DATE','NB-Dagkrant - DATE','NB-1-1 Pagina DATE']
const getData=flds.map(f=>[record?.getCellValue(f),f]).sort().reverse().map(arr=>arr.reverse().join(': '))
output.table(getData)

Hello Alexey,

Thank you very much, this script did the trick!

greetings,
Paul


Hey Stephen,

Thanks for your effort, unfortunately the sorting didn't work.
But you gave me an idea how to layout the final  view.

greetings,
Paul


Oops, this is what I get for not testing 🙂 I updated my previous code to sort strings instead of numbers. By the way, I would highly recommend readable/well documented code over shorter code for the sake of future maintenance. If you've ever inherited a project where someone has tried to write things in the shortest way possible with zero commenting, you'll soon know pain. Good luck!


Oops, this is what I get for not testing 🙂 I updated my previous code to sort strings instead of numbers. By the way, I would highly recommend readable/well documented code over shorter code for the sake of future maintenance. If you've ever inherited a project where someone has tried to write things in the shortest way possible with zero commenting, you'll soon know pain. Good luck!


Hello Stephen,

You are right, the improvement you've made, made the script working. Thank you very much.
And yes, when you make comments in a script it is a big help for future maintenance!


Reply