# Traversing arrays and objects in CoffeeScript # The array and object we use for testing arr = [1, 2, 3, 4, 5] obj = {a: 1, b: 2, c: 3, d: 4, e: 5} # 'in' has a different meaning in CoffeeScript than in JavaScript # CS: element in array -> JS: array.indexOf(element) >= 0 console.log '5 in arr: ' + (5 in arr) console.log '5 in obj: ' + (5 in obj) console.log 'e in obj: ' + ('e' in obj) # 'of' in CoffeeScript is the 'in' known in JavaScript # CS: key of object -> JS: key in object console.log '5 of arr: ' + (5 of arr) console.log '5 of obj: ' + (5 of obj) console.log 'e of obj: ' + ('e' of obj) # Traverse through an array # CS: for i in arr -> JS: for( var i; i < arr.length; i++ ) # CS: i -> JS: arr[i] console.log 'i in arr' for i in arr console.log i # CS: i -> JS: i, where i is an index # This will return only results for keys that # are numbers and within the range of the index console.log 'i in obj' for i in obj console.log i # CS: for i of arr -> JS for( i in arr ) # CS: i -> JS: i, where i is an object key # Basically, the same as JS: for( i in Object.keys(arr) ) console.log 'i of arr' for i of arr console.log i # This is the CS version of JS' for( k in obj ) console.log 'k of obj' for k of obj console.log k # CS: k, v -> JS: k, obj[k] console.log 'k, v of obj' for k, v of obj console.log k + ': ' + v # array.forEach is a method and thus behaves consistently # https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach console.log 'array.forEach(callback(v, k, arr))' arr.forEach (element, index, array) -> if index == 0 console.log 'arr == array: ' + (arr == array) console.log index + ': ' + element # .forEach is only available for arrays, not for objects