-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
array_push.js
44 lines (40 loc) · 1.38 KB
/
array_push.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
38
39
40
41
42
43
44
module.exports = function array_push (inputArr) { // eslint-disable-line camelcase
// discuss at: https://locutus.io/php/array_push/
// original by: Kevin van Zonneveld (https://kvz.io)
// improved by: Brett Zamir (https://brett-zamir.me)
// note 1: Note also that IE retains information about property position even
// note 1: after being supposedly deleted, so if you delete properties and then
// note 1: add back properties with the same keys (including numeric) that had
// note 1: been deleted, the order will be as before; thus, this function is not
// note 1: really recommended with associative arrays (objects) in IE environments
// example 1: array_push(['kevin','van'], 'zonneveld')
// returns 1: 3
var i = 0
var pr = ''
var argv = arguments
var argc = argv.length
var allDigits = /^\d$/
var size = 0
var highestIdx = 0
var len = 0
if (inputArr.hasOwnProperty('length')) {
for (i = 1; i < argc; i++) {
inputArr[inputArr.length] = argv[i]
}
return inputArr.length
}
// Associative (object)
for (pr in inputArr) {
if (inputArr.hasOwnProperty(pr)) {
++len
if (pr.search(allDigits) !== -1) {
size = parseInt(pr, 10)
highestIdx = size > highestIdx ? size : highestIdx
}
}
}
for (i = 1; i < argc; i++) {
inputArr[++highestIdx] = argv[i]
}
return len + i - 1
}