Created
October 8, 2019 10:48
-
-
Save halityurttas/c4e50fef7554dba4a5cc69a1c9ae5ae9 to your computer and use it in GitHub Desktop.
Coldfusion object property name flatter with dot notations. Also support index based arrays.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<cfcomponent> | |
<cffunction name="flatten" access="public" returntype="array"> | |
<cfargument name="data" type="any"> | |
<cfargument name="flattenArray" type="array" default="#arrayNew(1)#"> | |
<cfargument name="parentName" type="string" default=""> | |
<cfset arguments.flattenArray = flattenFactory( arguments.data, arguments.flattenArray, arguments.parentName )> | |
<cfreturn arguments.flattenArray> | |
</cffunction> | |
<cffunction name="flattenFactory" access="public" returntype="array"> | |
<cfargument name="data" type="any"> | |
<cfargument name="flattenArray" type="array"> | |
<cfargument name="parentName" type="string"> | |
<cfif isStruct( arguments.data )> | |
<cfreturn this.flattenStruct( arguments.data, arguments.flattenArray, arguments.parentName )> | |
</cfif> | |
<cfif isArray( arguments.data )> | |
<cfreturn this.flattenArray( arguments.data, arguments.flattenArray, arguments.parentName )> | |
</cfif> | |
<cfreturn arguments.flattenArray> | |
</cffunction> | |
<cffunction name="flattenStruct" access="public" returntype="array"> | |
<cfargument name="data" type="struct"> | |
<cfargument name="flattenArray" type="array"> | |
<cfargument name="parentName" type="string"> | |
<cfif arrayContains( arguments.flattenArray, arguments.parentName )> | |
<cfset arrayDelete( arguments.flattenArray, arguments.parentName )> | |
</cfif> | |
<cfloop collection="#arguments.data#" item="attr"> | |
<cfset elementName = ( len( arguments.parentName ) ? arguments.parentName & "." : "" ) & attr> | |
<cfset arrayAppend( arguments.flattenArray, elementName )> | |
<cfset arguments.flattenArray = flattenFactory( arguments.data[attr], arguments.flattenArray, elementName )> | |
</cfloop> | |
<cfreturn arguments.flattenArray> | |
</cffunction> | |
<cffunction name="flattenArray" access="public" returntype="array"> | |
<cfargument name="data" type="array"> | |
<cfargument name="flattenArray" type="array"> | |
<cfargument name="parentName" type="string"> | |
<cfloop array="#arguments.data#" index="i" item="attr"> | |
<cfset elementName = ( len( arguments.parentName ) ? arguments.parentName : "" ) & "[" & i & "]"> | |
<cfset arrayAppend( arguments.flattenArray, elementName )> | |
<cfset arguments.flattenArray = flattenFactory( attr, arguments.flattenArray, elementName )> | |
</cfloop> | |
<cfreturn arguments.flattenArray> | |
</cffunction> | |
</cfcomponent> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment