Skip to content

Commit 227629f

Browse files
committed
refactor, closes #3
1 parent 54fd1d7 commit 227629f

File tree

11 files changed

+3220
-39
lines changed

11 files changed

+3220
-39
lines changed

benchmark/all.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
Benchmarking: (4 of 4)
2+
· long-dupes
3+
· long
4+
· med
5+
· short
6+
7+
# benchmark/fixtures/long-dupes.js (100804 bytes)
8+
arr-diff-3.0.0 x 821 ops/sec ±0.56% (87 runs sampled)
9+
arr-diff-4.0.0 x 2,007 ops/sec ±0.48% (90 runs sampled)
10+
array-differ x 721 ops/sec ±0.99% (88 runs sampled)
11+
filter x 682 ops/sec ±0.78% (88 runs sampled)
12+
for-negative x 813 ops/sec ±0.38% (90 runs sampled)
13+
for x 810 ops/sec ±0.67% (89 runs sampled)
14+
forEach x 853 ops/sec ±0.84% (86 runs sampled)
15+
reduce-concat x 26.76 ops/sec ±0.52% (47 runs sampled)
16+
reduce-push x 849 ops/sec ±0.44% (88 runs sampled)
17+
while-arguments x 868 ops/sec ±0.61% (91 runs sampled)
18+
while-indexof x 831 ops/sec ±0.69% (89 runs sampled)
19+
while-multi-unshift x 1,190 ops/sec ±0.34% (91 runs sampled)
20+
while-multi x 838 ops/sec ±0.68% (90 runs sampled)
21+
while-push x 821 ops/sec ±0.62% (89 runs sampled)
22+
while-splice-args x 732 ops/sec ±0.60% (80 runs sampled)
23+
while-splice-for x 840 ops/sec ±0.53% (87 runs sampled)
24+
while-splice-pop-flatten x 862 ops/sec ±0.52% (87 runs sampled)
25+
while-splice-pop x 841 ops/sec ±0.55% (87 runs sampled)
26+
while-splice-recurse x 829 ops/sec ±0.60% (88 runs sampled)
27+
while-splice x 825 ops/sec ±0.56% (86 runs sampled)
28+
while-unshift x 559 ops/sec ±0.50% (87 runs sampled)
29+
30+
fastest is arr-diff-4.0.0
31+
32+
# benchmark/fixtures/long.js (94529 bytes)
33+
arr-diff-3.0.0 x 931 ops/sec ±0.61% (86 runs sampled)
34+
arr-diff-4.0.0 x 2,297 ops/sec ±0.80% (89 runs sampled)
35+
array-differ x 746 ops/sec ±0.36% (90 runs sampled)
36+
filter x 793 ops/sec ±0.70% (90 runs sampled)
37+
for-negative x 880 ops/sec ±1.12% (87 runs sampled)
38+
for x 905 ops/sec ±0.39% (89 runs sampled)
39+
forEach x 923 ops/sec ±0.66% (89 runs sampled)
40+
reduce-concat x 31.71 ops/sec ±0.72% (54 runs sampled)
41+
reduce-push x 900 ops/sec ±0.77% (90 runs sampled)
42+
while-arguments x 900 ops/sec ±0.47% (90 runs sampled)
43+
while-indexof x 909 ops/sec ±0.76% (90 runs sampled)
44+
while-multi-unshift x 1,271 ops/sec ±0.86% (90 runs sampled)
45+
while-multi x 903 ops/sec ±0.55% (89 runs sampled)
46+
while-push x 867 ops/sec ±0.76% (89 runs sampled)
47+
while-splice-args x 790 ops/sec ±0.70% (87 runs sampled)
48+
while-splice-for x 947 ops/sec ±0.59% (86 runs sampled)
49+
while-splice-pop-flatten x 877 ops/sec ±0.56% (86 runs sampled)
50+
while-splice-pop x 914 ops/sec ±0.61% (86 runs sampled)
51+
while-splice-recurse x 868 ops/sec ±0.61% (87 runs sampled)
52+
while-splice x 896 ops/sec ±0.65% (84 runs sampled)
53+
while-unshift x 600 ops/sec ±0.63% (87 runs sampled)
54+
55+
fastest is arr-diff-4.0.0
56+
57+
# benchmark/fixtures/med.js (708 bytes)
58+
arr-diff-3.0.0 x 795,709 ops/sec ±0.94% (89 runs sampled)
59+
arr-diff-4.0.0 x 4,826,767 ops/sec ±0.44% (89 runs sampled)
60+
array-differ x 683,324 ops/sec ±1.24% (88 runs sampled)
61+
filter x 676,644 ops/sec ±1.23% (84 runs sampled)
62+
for-negative x 917,980 ops/sec ±0.40% (91 runs sampled)
63+
for x 965,692 ops/sec ±1.10% (90 runs sampled)
64+
forEach x 913,574 ops/sec ±1.39% (88 runs sampled)
65+
reduce-concat x 306,565 ops/sec ±0.62% (88 runs sampled)
66+
reduce-push x 1,012,968 ops/sec ±0.51% (90 runs sampled)
67+
while-arguments x 2,007,696 ops/sec ±1.01% (89 runs sampled)
68+
while-indexof x 949,957 ops/sec ±1.26% (89 runs sampled)
69+
while-multi-unshift x 1,621,226 ops/sec ±0.43% (88 runs sampled)
70+
while-multi x 1,432,560 ops/sec ±0.96% (92 runs sampled)
71+
while-push x 972,228 ops/sec ±1.12% (89 runs sampled)
72+
while-splice-args x 2,076,428 ops/sec ±0.36% (89 runs sampled)
73+
while-splice-for x 842,134 ops/sec ±1.04% (91 runs sampled)
74+
while-splice-pop-flatten x 856,869 ops/sec ±1.25% (88 runs sampled)
75+
while-splice-pop x 858,470 ops/sec ±0.44% (91 runs sampled)
76+
while-splice-recurse x 845,639 ops/sec ±1.18% (91 runs sampled)
77+
while-splice x 791,821 ops/sec ±1.24% (84 runs sampled)
78+
while-unshift x 635,292 ops/sec ±0.45% (90 runs sampled)
79+
80+
fastest is arr-diff-4.0.0
81+
82+
# benchmark/fixtures/short.js (60 bytes)
83+
arr-diff-3.0.0 x 2,947,170 ops/sec ±0.61% (88 runs sampled)
84+
arr-diff-4.0.0 x 8,190,896 ops/sec ±1.16% (88 runs sampled)
85+
array-differ x 1,194,836 ops/sec ±1.29% (88 runs sampled)
86+
filter x 1,208,078 ops/sec ±0.31% (89 runs sampled)
87+
for-negative x 1,674,162 ops/sec ±1.23% (87 runs sampled)
88+
for x 1,667,726 ops/sec ±1.15% (88 runs sampled)
89+
forEach x 1,362,635 ops/sec ±0.52% (90 runs sampled)
90+
reduce-concat x 1,030,110 ops/sec ±1.13% (90 runs sampled)
91+
reduce-push x 1,417,495 ops/sec ±1.32% (91 runs sampled)
92+
while-arguments x 6,613,126 ops/sec ±0.49% (89 runs sampled)
93+
while-indexof x 1,516,408 ops/sec ±1.15% (90 runs sampled)
94+
while-multi-unshift x 1,501,110 ops/sec ±1.48% (91 runs sampled)
95+
while-multi x 1,551,854 ops/sec ±0.43% (90 runs sampled)
96+
while-push x 1,590,946 ops/sec ±1.20% (92 runs sampled)
97+
while-splice-args x 12,166,092 ops/sec ±0.37% (91 runs sampled)
98+
while-splice-for x 2,513,350 ops/sec ±0.27% (90 runs sampled)
99+
while-splice-pop-flatten x 2,419,937 ops/sec ±1.11% (89 runs sampled)
100+
while-splice-pop x 1,721,225 ops/sec ±1.56% (91 runs sampled)
101+
while-splice-recurse x 1,723,425 ops/sec ±0.42% (91 runs sampled)
102+
while-splice x 1,454,658 ops/sec ±1.36% (86 runs sampled)
103+
while-unshift x 1,516,083 ops/sec ±1.68% (89 runs sampled)
104+
105+
fastest is while-splice-args

benchmark/code/arr-diff-3.0.0.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
3+
var flatten = require('arr-flatten');
4+
var slice = [].slice;
5+
6+
module.exports = function(arr, arrays) {
7+
arrays = flatten(slice.call(arguments, 1));
8+
var len = arrays.length;
9+
for (var i = 0; i < len; i++) {
10+
remove(arr, arrays[i]);
11+
}
12+
return arr;
13+
};
14+
15+
function remove(arr, ele) {
16+
var idx = arr.indexOf(ele);
17+
while (idx !== -1) {
18+
arr.splice(idx, 1);
19+
idx = arr.indexOf(ele);
20+
}
21+
}

benchmark/code/while-arguments.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use strict';
2+
3+
module.exports = diff;
4+
5+
function diff(arr/*, arrays*/) {
6+
var len = arguments.length;
7+
var idx = 0;
8+
while (++idx < len) {
9+
arr = diffArray(arr, arguments[idx]);
10+
}
11+
return arr;
12+
}
13+
14+
function diffArray(one, two) {
15+
if (!Array.isArray(two)) {
16+
return one.slice();
17+
}
18+
19+
var len = one.length;
20+
var idx = -1;
21+
var arr = [];
22+
23+
while (++idx < len) {
24+
var ele = one[idx];
25+
if (two.indexOf(ele) === -1) {
26+
arr.push(ele);
27+
}
28+
}
29+
return arr;
30+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
3+
module.exports = function(arr, arrays) {
4+
for (var i = 1; i < arguments.length; i++) {
5+
diff(arr, arguments[i]);
6+
}
7+
return arr;
8+
};
9+
10+
function diff(one, two) {
11+
if (!Array.isArray(two)) return;
12+
var len = two.length;
13+
var idx = -1;
14+
while (++idx < len) {
15+
remove(one, two[idx]);
16+
}
17+
}
18+
19+
function remove(arr, ele) {
20+
var idx = arr.indexOf(ele);
21+
if (idx === -1) return;
22+
var item = arr.pop();
23+
if (item !== ele) {
24+
arr[idx] = item;
25+
}
26+
return remove(arr, ele);
27+
}

0 commit comments

Comments
 (0)