/
array_reverse.js
37 lines (32 loc) · 1015 Bytes
/
array_reverse.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module.exports = function array_reverse(array, preserveKeys) {
// discuss at: https://locutus.io/php/array_reverse/
// original by: Kevin van Zonneveld (https://kvz.io)
// improved by: Karol Kowalski
// example 1: array_reverse( [ 'php', '4.0', ['green', 'red'] ], true)
// returns 1: { 2: ['green', 'red'], 1: '4.0', 0: 'php'}
const isArray = Object.prototype.toString.call(array) === '[object Array]'
const tmpArr = preserveKeys ? {} : []
let key
if (isArray && !preserveKeys) {
return array.slice(0).reverse()
}
if (preserveKeys) {
const keys = []
for (key in array) {
keys.push(key)
}
let i = keys.length
while (i--) {
key = keys[i]
// @todo: don't rely on browsers keeping keys in insertion order
// it's implementation specific
// eg. the result will differ from expected in Google Chrome
tmpArr[key] = array[key]
}
} else {
for (key in array) {
tmpArr.unshift(array[key])
}
}
return tmpArr
}