Help

The Community will be temporarily unavailable starting on Friday February 28. We’ll be back as soon as we can! To learn more, check out our Announcements blog post.

Issue with airtable script: Find records matching a value from a single/multiple select field

Topic Labels: Scripting
Solved
Jump to Solution
2917 1
cancel
Showing results for 
Search instead for 
Did you mean: 
kofal
5 - Automation Enthusiast
5 - Automation Enthusiast

Hi All,

I am having an issue with my script:

When using an integer value in the condition, the script works.

Example: return all records that have a value higher than 9 in the field name "Bedroom":

 

const propertyTable = base.getTable("Listing");

// Read the data from my Listing table
const recordsFromproPertyTable = await propertyTable.selectRecordsAsync (); 

//Filter records matching a condition
const matches = recordsFromproPertyTable.records.filter((records)=>{
  return recordsFromproPertyTable.records.find((potentialmatch)=> {
       return records.getCellValue("Bedroom") > 9;
        }
    )
})

console.log(matches)

 

When trying to match the field value with a single select or multiple select field, I am getting the following error:

This condition will always return 'true' since the types  and 'string' have no overlap."

I am pretty sure this is due to the fact that I am comparing an Array with text but I am not sure how to solve this:

Return all records that have a value of "Villa" for the field name "Property type" (Single select field type)

 

const propertyTable = base.getTable("Listing");

// Read the data from my Listing table
const recordsFromproPertyTable = await propertyTable.selectRecordsAsync (); 

//Filter records matching a condition
const matches = recordsFromproPertyTable.records.filter((records)=>{
  return recordsFromproPertyTable.records.find((potentialmatch)=> {
       return records.getCellValue("Property type") === "Villa";
        }
    )
})

console.log(matches)

 

  Any help would be immensely appreciated.

1 Solution

Accepted Solutions
kofal
5 - Automation Enthusiast
5 - Automation Enthusiast

50 youtube videos later, I did some modification and could kinda make it work.

 

// Script setup

let opportunitiesTable = base.getTable("Opportunities");

// Ask the user for Input

let opportunity = await input.recordAsync("Select opportunity", opportunitiesTable);

console.log(opportunity)
// Get the listing table

let propertiesTable = base.getTable("Listing");

let allProperties = await propertiesTable.selectRecordsAsync({fields:["Property Name","Budget range","Property type","Land type", "View type"]});

// Filter all properties that could match

let properties = allProperties.records.filter(property => {
    // @ts-ignore
    return property.getCellValueAsString("View type") === opportunity.getCellValueAsString("View type")
});

console.log(properties)

The code below works great with a single select field since it passes the field value as text and compares them with each other. 

I am hitting a limitation with multiple select field types tho. The current script only filters records where the targeted field is an exact match. Is there a way to change it so that it acts like the usual airtable filter "Has any of the options"

See Solution in Thread

1 Reply 1
kofal
5 - Automation Enthusiast
5 - Automation Enthusiast

50 youtube videos later, I did some modification and could kinda make it work.

 

// Script setup

let opportunitiesTable = base.getTable("Opportunities");

// Ask the user for Input

let opportunity = await input.recordAsync("Select opportunity", opportunitiesTable);

console.log(opportunity)
// Get the listing table

let propertiesTable = base.getTable("Listing");

let allProperties = await propertiesTable.selectRecordsAsync({fields:["Property Name","Budget range","Property type","Land type", "View type"]});

// Filter all properties that could match

let properties = allProperties.records.filter(property => {
    // @ts-ignore
    return property.getCellValueAsString("View type") === opportunity.getCellValueAsString("View type")
});

console.log(properties)

The code below works great with a single select field since it passes the field value as text and compares them with each other. 

I am hitting a limitation with multiple select field types tho. The current script only filters records where the targeted field is an exact match. Is there a way to change it so that it acts like the usual airtable filter "Has any of the options"