Whatever message this page gives is out now! Go check it out!

ListFind

Last update:
May 18, 2026

Description

Determines the index of the first list element in which a specified value occurs. Case sensitive.

Returns

Index of the first list element that contains value, with matching case. If not found, returns zero. The search is case sensitive.
History
ColdFusion (2018 release): Introduced named parameters.

Category

Function syntax

ListFind(list, value [, delimiters, includeEmptyFields ])

See also

ListContains ListFindNoCaseLists  in  Data types- Developing guide in the Developing ColdFusion Applications

Parameters

Parameter
Description
includeEmptyFields
Optional. Set to yes to include empty values.
list
A list or a variable that contains one
value
A string, a number, or a variable that contains one. Item for which to search. The search is case sensitive.
delimiters
A string or a variable that contains one. Characters that separate list elements. The default value is comma . If this parameter contains more than one character, ColdFusion processes each occurrence of each character as a delimiter.

History

ColdFusion (2018 release): Introduced named parameters.

Usage

ColdFusion ignores empty list elements; thus, the list "a,b,c,,,d" has four elements.

Example

<cfscript>
       myList="Tokyo,Bangkok,bangkok,bangKok,Jakarta,Manila,Bangalore,Shanghai";
       myFind=ListFind(myList,"bangkok");
       WriteOutput(myFind); // Returns 3
</cfscript>
Output
3

Real-world uses of the ListFind function

User permissions and role management

An enterprise web application manages user access through role-based permissions where each user has a comma-separated list of permission codes. The system needs to verify user permissions in real-time for secure access control to various application features, reports, and administrative functions.
How it helps:
  • Real-time access control with millisecond response times
  • Easy addition of new permissions without code changes
  • Complete tracking of permission-based access attempts
  • Seamless access to authorized features without delays
<cfscript>
    // Simple Permission Checking with ListFind
    // Business: Verify user access rights for secure applications
    
    // Sample users with different permission levels
    users = [
        {"username": "admin.user", "role": "Administrator", "permissions": "ADMIN,USER_MGMT,REPORTS,PAYROLL"},
        {"username": "hr.manager", "role": "HR Manager", "permissions": "HR_MGMT,REPORTS,USER_VIEW"},
        {"username": "employee", "role": "Employee", "permissions": "PROFILE_EDIT,TIMESHEET"}
    ];
    
    // Simple permission checker
    function hasPermission(userPermissions, requiredPermission) {
        return ListFind(userPermissions, requiredPermission) > 0;
    }
</cfscript>

<cfoutput>
    <h1>🔐 ListFind: Permission Checking Demo</h1>
    <p><strong>Business Need:</strong> Control access to application features based on user permissions</p>
    <p><strong>Challenge:</strong> Users have different permission combinations stored as comma-separated lists</p>
    <p><strong>Solution:</strong> Use ListFind() to verify if specific permissions exist in user's list</p>
    <hr>
    
    <h2>Permission Testing Examples</h2>
</cfoutput>

<cfloop array="#users#" index="userData">
    <cfoutput>
        <h3>#userData["username"]# - #userData["role"]#</h3>
        <div style="background: ##f8f9fa; padding: 15px; margin: 10px 0; border: 1px solid ##ddd;">
            <p><strong>User Permissions:</strong> #userData["permissions"]#</p>
            
            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px;">
    </cfoutput>
    
    <cfscript>
        // Test common permissions
        testPermissions = ["ADMIN", "REPORTS", "USER_MGMT", "TIMESHEET"];
    </cfscript>
    
    <cfloop array="#testPermissions#" index="permission">
        <cfscript>
            hasAccess = hasPermission(userData["permissions"], permission);
            position = ListFind(userData["permissions"], permission);
        </cfscript>
        
        <cfoutput>
            <div style="background: #hasAccess ? '##d4edda' : '##f8d7da'#; padding: 10px; border-radius: 5px; text-align: center;">
                <h5 style="margin-top: 0;">#permission#</h5>
                <p><strong>Access:</strong> #hasAccess ? 'GRANTED ✅' : 'DENIED ❌'#</p>
                <cfif hasAccess>
                    <p><strong>Position:</strong> #position#</p>
                </cfif>
            </div>
        </cfoutput>
    </cfloop>
    
    <cfoutput>
            </div>
        </div>
    </cfoutput>
</cfloop>

eCommerce product category and filtering

An online marketplace with 100,000+ products uses category tags and filter attributes to help customers find products efficiently. Each product has comma-separated category lists and attribute tags that power search filters, product recommendations, and inventory management across multiple sales channels.
<cfscript>
    // Simple Product Category Filtering with ListFind
    // Business: Filter e-commerce products by category membership
    
    // Sample products with category lists
    products = [
        {"name": "Gaming Laptop", "categories": "electronics,computers,gaming", "price": 1299.99},
        {"name": "Wireless Headset", "categories": "electronics,audio,gaming", "price": 149.99},
        {"name": "Office Monitor", "categories": "electronics,monitors,business", "price": 329.99},
        {"name": "Smartphone", "categories": "electronics,mobile,communication", "price": 899.99}
    ];
    
    // Simple category filter function
    function filterByCategory(productList, targetCategory) {
        var matchedProducts = [];
        
        for (productData in productList) {
            if (ListFind(productData["categories"], targetCategory) > 0) {
                arrayAppend(matchedProducts, productData);
            }
        }
        
        return matchedProducts;
    }
</cfscript>

<cfoutput>
    <h1>🛒 ListFind: Product Category Demo</h1>
    <p><strong>Business Need:</strong> Filter products by category for better customer experience</p>
    <p><strong>Challenge:</strong> Products belong to multiple categories simultaneously</p>
    <p><strong>Solution:</strong> Use ListFind() to check if products belong to specific categories</p>
    <hr>
    
    <h2>All Products</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px;">
</cfoutput>

<cfloop array="#products#" index="productData">
    <cfoutput>
        <div style="background: ##f8f9fa; padding: 15px; border: 1px solid ##ddd; border-radius: 5px;">
            <h4 style="margin-top: 0;">#productData["name"]#</h4>
            <p><strong>Price:</strong> $#numberFormat(productData["price"], "0.00")#</p>
            <p><strong>Categories:</strong> #productData["categories"]#</p>
        </div>
    </cfoutput>
</cfloop>

<cfoutput>
    </div>
    
    <h2>Category Filter Examples</h2>
</cfoutput>

<cfscript>
    // Test different category filters
    categoryTests = ["gaming", "electronics", "business", "audio"];
</cfscript>

<cfloop array="#categoryTests#" index="category">
    <cfscript>
        filteredProducts = filterByCategory(products, category);
    </cfscript>
    
    <cfoutput>
        <h3>Filter: "#category#" Category</h3>
        <div style="background: ##e3f2fd; padding: 15px; border-radius: 5px; margin: 10px 0;">
            <p><strong>Products Found:</strong> #arrayLen(filteredProducts)# out of #arrayLen(products)#</p>
            
            <cfif arrayLen(filteredProducts) > 0>
                <h4>Matching Products:</h4>
                <cfloop array="#filteredProducts#" index="product">
                    <div style="background: ##e8f5e8; padding: 10px; margin: 10px 0; border-radius: 5px;">
                        <strong>#product["name"]#</strong> - $#numberFormat(product["price"], "0.00")#<br>
                        <em>Categories: #product["categories"]#</em><br>
                        <strong>Position in list:</strong> #ListFind(product["categories"], category)#
                    </div>
                </cfloop>
            <cfelse>
                <p style="color: ##666; font-style: italic;">No products found in this category.</p>
            </cfif>
        </div>
    </cfoutput>
</cfloop>

Email marketing and management

A marketing automation platform manages subscriber lists and email campaigns for 50,000+ customers. Each subscriber belongs to multiple interest-based lists and demographic segments, requiring sophisticated list management for targeted campaigns, compliance tracking, and personalized communication strategies.
How it helps:
  • Send developer-specific content only to subscribers in "development" list
  • Ensure unsubscribe preferences are honored across all relevant lists
  • Customize email content based on subscriber's list memberships
  • Track engagement rates by subscriber list combinations
<cfscript>
    // Simple Email List Management with ListFind
    // Business: Target email campaigns to specific subscriber segments
    
    // Sample subscribers with interest lists
    subscribers = [
        {"name": "Alex Developer", "email": "alex@tech.com", "lists": "technology,tutorials,development"},
        {"name": "Sarah Business", "email": "sarah@corp.com", "lists": "business,newsletters,leadership"},
        {"name": "Mike Designer", "email": "mike@creative.com", "lists": "design,tutorials,inspiration"},
        {"name": "Lisa Analyst", "email": "lisa@data.com", "lists": "technology,business,data_science"}
    ];
    
    // Simple campaign targeting function
    function getTargetAudience(subscriberList, targetList) {
        var targetedSubscribers = [];
        
        for (subscriberData in subscriberList) {
            if (ListFind(subscriberData["lists"], targetList) > 0) {
                arrayAppend(targetedSubscribers, subscriberData);
            }
        }
        
        return targetedSubscribers;
    }
</cfscript>

<cfoutput>
    <h1>📧 ListFind: Email Campaign Demo</h1>
    <p><strong>Business Need:</strong> Send targeted emails to specific subscriber segments</p>
    <p><strong>Challenge:</strong> Subscribers belong to multiple interest lists</p>
    <p><strong>Solution:</strong> Use ListFind() to target campaigns to specific list members</p>
    <hr>
    
    <h2>All Subscribers</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 15px;">
</cfoutput>

<cfloop array="#subscribers#" index="subscriberData">
    <cfoutput>
        <div style="background: ##f8f9fa; padding: 15px; border: 1px solid ##ddd; border-radius: 5px;">
            <h4 style="margin-top: 0;">#subscriberData["name"]#</h4>
            <p><strong>Email:</strong> #subscriberData["email"]#</p>
            <p><strong>Lists:</strong> #subscriberData["lists"]#</p>
        </div>
    </cfoutput>
</cfloop>

<cfoutput>
    </div>
    
    <h2>Campaign Targeting Examples</h2>
</cfoutput>

<cfscript>
    // Test different campaign targets
    campaignTargets = [
        {"list": "technology", "type": "Tech Newsletter"},
        {"list": "business", "type": "Business Insights"},
        {"list": "tutorials", "type": "Learning Resources"},
        {"list": "design", "type": "Creative Inspiration"}
    ];
</cfscript>

<cfloop array="#campaignTargets#" index="campaign">
    <cfscript>
        targetedList = getTargetAudience(subscribers, campaign.list);
        coveragePercent = (arrayLen(targetedList) / arrayLen(subscribers)) * 100;
    </cfscript>
    
    <cfoutput>
        <h3>Campaign: #campaign.type# (Target: "#campaign.list#")</h3>
        <div style="background: ##fff3cd; padding: 15px; border-radius: 5px; margin: 10px 0;">
            <p><strong>Subscribers Targeted:</strong> #arrayLen(targetedList)# out of #arrayLen(subscribers)# (#numberFormat(coveragePercent, "0.0")#% coverage)</p>
            
            <cfif arrayLen(targetedList) > 0>
                <h4>Campaign Recipients:</h4>
                <cfloop array="#targetedList#" index="recipient">
                    <cfscript>
                        position = ListFind(recipient["lists"], campaign.list);
                    </cfscript>
                    <div style="background: ##e8f5e8; padding: 10px; margin: 5px 0; border-radius: 5px;">
                        <strong>#recipient["name"]#</strong> (#recipient["email"]#)<br>
                        <em>All Lists: #recipient["lists"]#</em><br>
                        <strong>"#campaign.list#" Position:</strong> #position#
                    </div>
                </cfloop>
            <cfelse>
                <p style="color: ##666; font-style: italic;">No subscribers found for this campaign.</p>
            </cfif>
        </div>
    </cfoutput>
</cfloop>

Inventory management and warehouse operations

A multi-location distribution company manages inventory across 25 warehouses with complex location codes and status tracking. Each product has location lists and status codes that determine availability, shipping routes, and fulfillment strategies for efficient supply chain management.
How it helps:
  • Find nearest warehouse with available inventory
  • Verify products are stored in authorized locations
  • Confirm inventory status before shipment approval
  • Select optimal shipping warehouse based on customer location
<cfscript>
    // Simple Inventory Location Management with ListFind  
    // Business: Find products across multiple warehouse locations
    
    // Sample inventory with location lists
    inventory = [
        {"product": "Blood Pressure Monitor", "locations": "WH001,WH003,WH007", "units": 150},
        {"product": "Digital Thermometer", "locations": "WH002,WH005,WH009", "units": 200},
        {"product": "Hand Sanitizer", "locations": "WH001,WH004,WH006", "units": 300},
        {"product": "Face Masks", "locations": "WH003,WH007,WH008", "units": 500}
    ];
    
    // Warehouse information
    warehouses = {
        "WH001": "Main Distribution - New York",
        "WH002": "West Coast Hub - Los Angeles", 
        "WH003": "Midwest Center - Chicago",
        "WH004": "Southeast Hub - Atlanta",
        "WH005": "Northwest Center - Seattle"
    };
    
    // Simple inventory finder
    function findProductsAtWarehouse(inventoryList, warehouseCode) {
        var productsFound = [];
        
        for (inventoryItem in inventoryList) {
            if (ListFind(inventoryItem["locations"], warehouseCode) > 0) {
                arrayAppend(productsFound, inventoryItem);
            }
        }
        
        return productsFound;
    }
</cfscript>

<cfoutput>
    <h1>🏭 ListFind: Inventory Location Demo</h1>
    <p><strong>Business Need:</strong> Find which products are available at specific warehouses</p>
    <p><strong>Challenge:</strong> Products are stored across multiple warehouse locations</p>
    <p><strong>Solution:</strong> Use ListFind() to check product availability by location</p>
    <hr>
    
    <h2>Complete Inventory</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 15px;">
</cfoutput>

<cfloop array="#inventory#" index="inventoryItem">
    <cfoutput>
        <div style="background: ##f8f9fa; padding: 15px; border: 1px solid ##ddd; border-radius: 5px;">
            <h4 style="margin-top: 0;">#inventoryItem["product"]#</h4>
            <p><strong>Units Available:</strong> #numberFormat(inventoryItem["units"], "0,0")#</p>
            <p><strong>Locations:</strong> #inventoryItem["locations"]#</p>
        </div>
    </cfoutput>
</cfloop>

<cfoutput>
    </div>
    
    <h2>Warehouse Inventory Lookup</h2>
</cfoutput>

<cfscript>
    // Test different warehouse locations
    warehouseTests = ["WH001", "WH003", "WH005", "WH999"];
</cfscript>

<cfloop array="#warehouseTests#" index="warehouseCode">
    <cfscript>
        productsAtLocation = findProductsAtWarehouse(inventory, warehouseCode);
        warehouseName = structKeyExists(warehouses, warehouseCode) ? warehouses[warehouseCode] : "Unknown Warehouse";
    </cfscript>
    
    <cfoutput>
        <h3>Warehouse: #warehouseCode# - #warehouseName#</h3>
        <div style="background: ##f0f8ff; padding: 15px; border-radius: 5px; margin: 10px 0;">
            <p><strong>Products Available:</strong> #arrayLen(productsAtLocation)# products</p>
            
            <cfif arrayLen(productsAtLocation) > 0>
                <h4>Available Products:</h4>
                <cfloop array="#productsAtLocation#" index="product">
                    <cfscript>
                        position = ListFind(product["locations"], warehouseCode);
                    </cfscript>
                    <div style="background: ##e8f5e8; padding: 10px; margin: 10px 0; border-radius: 5px;">
                        <strong>#product["product"]#</strong><br>
                        <strong>Units:</strong> #numberFormat(product["units"], "0,0")#<br>
                        <em>All Locations: #product["locations"]#</em><br>
                        <strong>Position in Location List:</strong> #position#
                    </div>
                </cfloop>
            <cfelse>
                <p style="color: ##666; font-style: italic;">No products available at this warehouse.</p>
            </cfif>
        </div>
    </cfoutput>
</cfloop>

Share this page

Was this page helpful?
We're glad. Tell us how this page helped.
We're sorry. Can you tell us what didn't work for you?
Thank you for your feedback. Your response will help improve this page.

On this page