react-native-web-headroom
Version:
React Native Web Headroom
186 lines (95 loc) • 2.11 kB
text/coffeescript
module.exports = array =
###
Tries to turn anything into an array.
###
from: (r) ->
Array::slice.call r
###
Clone of an array. Properties will be shallow copies.
###
simpleClone: (a) ->
a.slice 0
shallowEqual: (a1, a2) ->
return no unless Array.isArray(a1) and Array.isArray(a2) and a1.length is a2.length
for val, i in a1
return no unless a2[i] is val
yes
pluck: (a, i) ->
return a if a.length < 1
for value, index in a
if index > i
a[index - 1] = a[index]
a.length = a.length - 1
a
pluckItem: (a, item) ->
return a if a.length < 1
removed = 0
for value, index in a
if value is item
removed++
continue
if removed isnt 0
a[index - removed] = a[index]
a.length = a.length - removed if removed > 0
a
pluckOneItem: (a, item) ->
return a if a.length < 1
reached = no
for value, index in a
if not reached
if value is item
reached = yes
continue
else
a[index - 1] = a[index]
a.length = a.length - 1 if reached
a
pluckByCallback: (a, cb) ->
return a if a.length < 1
removed = 0
for value, index in a
if cb value, index
removed++
continue
if removed isnt 0
a[index - removed] = a[index]
if removed > 0
a.length = a.length - removed
a
pluckMultiple: (array, indexesToRemove) ->
return array if array.length < 1
removedSoFar = 0
indexesToRemove.sort()
for i in indexesToRemove
@pluck array, i - removedSoFar
removedSoFar++
array
injectByCallback: (a, toInject, shouldInject) ->
valA = null
valB = null
len = a.length
if len < 1
a.push toInject
return a
for val, i in a
valA = valB
valB = val
if shouldInject valA, valB, toInject
return a.splice i, 0, toInject
a.push toInject
a
injectInIndex: (a, index, toInject) ->
len = a.length
i = index
if len < 1
a.push toInject
return a
toPut = toInject
toPutNext = null
`for(; i <= len; i++){
toPutNext = a[i];
a[i] = toPut;
toPut = toPutNext;
}`
# a[i] = toPut
null