Skip to content

Commit cd9c00d

Browse files
committed
maint(core utils): Un-underscore core.utils.
1 parent da0d9d9 commit cd9c00d

File tree

2 files changed

+84
-93
lines changed

2 files changed

+84
-93
lines changed

src/core/utils.js

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import $ from "jquery";
2-
import _ from "underscore";
32
import dom from "./dom";
43

54
$.fn.safeClone = function () {
@@ -343,25 +342,24 @@ function removeDuplicateObjects(objs) {
343342
/* Given an array of objects, remove any duplicate objects which might
344343
* be present.
345344
*/
346-
var comparator = function (v, k) {
345+
const comparator = function (k, v) {
347346
return this[k] === v;
348347
};
349-
return _.reduce(
350-
objs,
351-
function (list, next_obj) {
352-
var is_duplicate = false;
353-
_.each(list, function (obj) {
354-
is_duplicate =
355-
_.keys(obj).length === _.keys(next_obj).length &&
356-
!_.chain(obj).omit(comparator.bind(next_obj)).keys().value().length;
357-
});
358-
if (!is_duplicate) {
359-
list.push(next_obj);
360-
}
361-
return list;
362-
},
363-
[]
364-
);
348+
349+
return objs.reduce(function (list, next_obj) {
350+
let is_duplicate = false;
351+
for (const obj of list) {
352+
is_duplicate =
353+
Object.keys(obj).length === Object.keys(next_obj).length &&
354+
Object.entries(obj).filter(
355+
(it) => !comparator.bind(next_obj)(it[0], it[1])
356+
).length === 0;
357+
}
358+
if (!is_duplicate) {
359+
list.push(next_obj);
360+
}
361+
return list;
362+
}, []);
365363
}
366364

367365
function mergeStack(stack, length) {
@@ -372,19 +370,19 @@ function mergeStack(stack, length) {
372370
* If a certain sub-list doesn't have an object at that particular
373371
* index, the last object in that list is merged.
374372
*/
375-
var results = [];
376-
for (var i = 0; i < length; i++) {
373+
const results = [];
374+
for (let i = 0; i < length; i++) {
377375
results.push({});
378376
}
379-
_.each(stack, function (frame) {
380-
var frame_length = frame.length - 1;
381-
for (var x = 0; x < length; x++) {
377+
for (const frame of stack) {
378+
const frame_length = frame.length - 1;
379+
for (let x = 0; x < length; x++) {
382380
results[x] = $.extend(
383381
results[x] || {},
384382
frame[x > frame_length ? frame_length : x]
385383
);
386384
}
387-
});
385+
}
388386
return results;
389387
}
390388

src/core/utils.test.js

Lines changed: 62 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import "regenerator-runtime/runtime"; // needed for ``await`` support
2-
import _ from "underscore";
32
import utils from "./utils";
43
import $ from "jquery";
54
import { jest } from "@jest/globals";
@@ -57,98 +56,92 @@ describe("basic tests", function () {
5756

5857
objs = [{}, {}];
5958
expect(utils.removeDuplicateObjects(objs).length).toBe(1);
60-
expect(_.isArray(utils.removeDuplicateObjects(objs))).toBeTruthy();
61-
62-
_.each(
63-
[
64-
[{ a: "1" }],
65-
[{ a: "1" }, { a: "1" }],
66-
[{ a: "1" }, { a: "1" }, { a: "1" }],
67-
[{ a: "1" }, { a: "1" }, { a: "1" }, { a: "1" }],
68-
],
69-
function (objs) {
70-
expect(utils.removeDuplicateObjects(objs).length).toBe(1);
71-
expect(_.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1);
72-
expect(_.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
73-
expect(_.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1");
74-
}
75-
);
59+
expect(Array.isArray(utils.removeDuplicateObjects(objs))).toBeTruthy();
60+
61+
for (const objs of [
62+
[{ a: "1" }],
63+
[{ a: "1" }, { a: "1" }],
64+
[{ a: "1" }, { a: "1" }, { a: "1" }],
65+
[{ a: "1" }, { a: "1" }, { a: "1" }, { a: "1" }],
66+
]) {
67+
expect(utils.removeDuplicateObjects(objs).length).toBe(1);
68+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1); // prettier-ignore
69+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
70+
expect(Object.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1"); // prettier-ignore
71+
}
7672

7773
objs = [{ a: "1" }, { a: "2" }];
7874
expect(utils.removeDuplicateObjects(objs).length).toBe(2);
79-
expect(_.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1);
80-
expect(_.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
81-
expect(_.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1");
82-
expect(_.keys(utils.removeDuplicateObjects(objs)[1]).length).toBe(1);
83-
expect(_.keys(utils.removeDuplicateObjects(objs)[1])[0]).toBe("a");
84-
expect(_.values(utils.removeDuplicateObjects(objs)[1])[0]).toBe("2");
75+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1);
76+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
77+
expect(Object.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1");
78+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1]).length).toBe(1);
79+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1])[0]).toBe("a");
80+
expect(Object.values(utils.removeDuplicateObjects(objs)[1])[0]).toBe("2");
8581

8682
objs = [{ a: "1" }, { b: "1" }];
8783
expect(utils.removeDuplicateObjects(objs).length).toBe(2);
88-
expect(_.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1);
89-
expect(_.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
90-
expect(_.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1");
91-
expect(_.keys(utils.removeDuplicateObjects(objs)[1]).length).toBe(1);
92-
expect(_.keys(utils.removeDuplicateObjects(objs)[1])[0]).toBe("b");
93-
expect(_.values(utils.removeDuplicateObjects(objs)[1])[0]).toBe("1");
94-
95-
_.each(
96-
[
97-
[{ a: "1" }, { a: "1", b: "1" }],
98-
[{ a: "1" }, { a: "1" }, { a: "1", b: "1" }],
99-
],
100-
function (objs) {
101-
expect(utils.removeDuplicateObjects(objs).length).toBe(2);
102-
expect(_.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1);
103-
expect(_.keys(utils.removeDuplicateObjects(objs)[1]).length).toBe(2);
104-
expect(_.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
105-
expect(_.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1");
106-
expect(_.keys(utils.removeDuplicateObjects(objs)[1])[0]).toBe("a");
107-
expect(_.values(utils.removeDuplicateObjects(objs)[1])[0]).toBe("1");
108-
expect(_.keys(utils.removeDuplicateObjects(objs)[1])[1]).toBe("b");
109-
expect(_.values(utils.removeDuplicateObjects(objs)[1])[1]).toBe("1");
110-
}
111-
);
84+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1);
85+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
86+
expect(Object.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1");
87+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1]).length).toBe(1);
88+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1])[0]).toBe("b");
89+
expect(Object.values(utils.removeDuplicateObjects(objs)[1])[0]).toBe("1");
90+
91+
for (const objs of [
92+
[{ a: "1" }, { a: "1", b: "1" }],
93+
[{ a: "1" }, { a: "1" }, { a: "1", b: "1" }],
94+
]) {
95+
expect(utils.removeDuplicateObjects(objs).length).toBe(2);
96+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0]).length).toBe(1); // prettier-ignore
97+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1]).length).toBe(2); // prettier-ignore
98+
expect(Object.keys(utils.removeDuplicateObjects(objs)[0])[0]).toBe("a");
99+
expect(Object.values(utils.removeDuplicateObjects(objs)[0])[0]).toBe("1"); // prettier-ignore
100+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1])[0]).toBe("a");
101+
expect(Object.values(utils.removeDuplicateObjects(objs)[1])[0]).toBe("1"); // prettier-ignore
102+
expect(Object.keys(utils.removeDuplicateObjects(objs)[1])[1]).toBe("b");
103+
expect(Object.values(utils.removeDuplicateObjects(objs)[1])[1]).toBe("1"); // prettier-ignore
104+
}
112105
});
113106
});
114107

115108
describe("mergeStack", function () {
116109
it("merges a list of lists of objects", function () {
117110
var stack = [];
118111
var length = 0;
119-
expect(_.isArray(utils.mergeStack(stack, length))).toBeTruthy();
112+
expect(Array.isArray(utils.mergeStack(stack, length))).toBeTruthy();
120113
expect(utils.mergeStack(stack, length).length).toBe(0);
121114

122-
_.each([1, 2, 3, 99], function (length) {
123-
expect(_.isArray(utils.mergeStack(stack, length))).toBeTruthy();
115+
for (const length of [1, 2, 3, 99]) {
116+
expect(Array.isArray(utils.mergeStack(stack, length))).toBeTruthy();
124117
expect(utils.mergeStack(stack, length).length).toBe(length);
125-
expect(_.isObject(utils.mergeStack(stack, length)[0])).toBeTruthy();
126-
expect(_.keys(utils.mergeStack(stack, length)[0]).length).toBe(0);
127-
});
118+
expect(typeof utils.mergeStack(stack, length)[0] === "object").toBeTruthy(); // prettier-ignore
119+
expect(Object.keys(utils.mergeStack(stack, length)[0]).length).toBe(0);
120+
}
128121

129122
stack = [[{ a: 1 }], [{ b: 1 }, { b: 2 }]];
130123
length = 2;
131-
expect(_.isArray(utils.mergeStack(stack, length))).toBeTruthy();
124+
expect(Array.isArray(utils.mergeStack(stack, length))).toBeTruthy();
132125
expect(utils.mergeStack(stack, length).length).toBe(2);
133-
expect(_.keys(utils.mergeStack(stack, length)[0])[0]).toBe("a");
134-
expect(_.keys(utils.mergeStack(stack, length)[0])[1]).toBe("b");
135-
expect(_.keys(utils.mergeStack(stack, length)[1])[0]).toBe("a");
136-
expect(_.keys(utils.mergeStack(stack, length)[1])[1]).toBe("b");
137-
expect(_.values(utils.mergeStack(stack, length)[0])[0]).toBe(1);
138-
expect(_.values(utils.mergeStack(stack, length)[0])[1]).toBe(1);
139-
expect(_.values(utils.mergeStack(stack, length)[1])[0]).toBe(1);
140-
expect(_.values(utils.mergeStack(stack, length)[1])[1]).toBe(2);
126+
expect(Object.keys(utils.mergeStack(stack, length)[0])[0]).toBe("a");
127+
expect(Object.keys(utils.mergeStack(stack, length)[0])[1]).toBe("b");
128+
expect(Object.keys(utils.mergeStack(stack, length)[1])[0]).toBe("a");
129+
expect(Object.keys(utils.mergeStack(stack, length)[1])[1]).toBe("b");
130+
expect(Object.values(utils.mergeStack(stack, length)[0])[0]).toBe(1);
131+
expect(Object.values(utils.mergeStack(stack, length)[0])[1]).toBe(1);
132+
expect(Object.values(utils.mergeStack(stack, length)[1])[0]).toBe(1);
133+
expect(Object.values(utils.mergeStack(stack, length)[1])[1]).toBe(2);
141134

142135
stack = [[{ a: 1 }], [{ a: 2 }, { a: 3 }]];
143136
length = 2;
144-
expect(_.isArray(utils.mergeStack(stack, length))).toBeTruthy();
137+
expect(Array.isArray(utils.mergeStack(stack, length))).toBeTruthy();
145138
expect(utils.mergeStack(stack, length).length).toBe(2);
146-
expect(_.keys(utils.mergeStack(stack, length)[0]).length).toBe(1);
147-
expect(_.keys(utils.mergeStack(stack, length)[1]).length).toBe(1);
148-
expect(_.keys(utils.mergeStack(stack, length)[0])[0]).toBe("a");
149-
expect(_.keys(utils.mergeStack(stack, length)[1])[0]).toBe("a");
150-
expect(_.values(utils.mergeStack(stack, length)[0])[0]).toBe(2);
151-
expect(_.values(utils.mergeStack(stack, length)[1])[0]).toBe(3);
139+
expect(Object.keys(utils.mergeStack(stack, length)[0]).length).toBe(1);
140+
expect(Object.keys(utils.mergeStack(stack, length)[1]).length).toBe(1);
141+
expect(Object.keys(utils.mergeStack(stack, length)[0])[0]).toBe("a");
142+
expect(Object.keys(utils.mergeStack(stack, length)[1])[0]).toBe("a");
143+
expect(Object.values(utils.mergeStack(stack, length)[0])[0]).toBe(2);
144+
expect(Object.values(utils.mergeStack(stack, length)[1])[0]).toBe(3);
152145
});
153146
});
154147

0 commit comments

Comments
 (0)