Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 986bd35

Browse files
committed
replaced lodash keyby
1 parent d582ffa commit 986bd35

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

packages/optimizely-sdk/lib/utils/fns/index.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
var uuid = require('uuid');
1717
var _isFinite = require('lodash/isFinite');
18+
var { keyBy } = require('@optimizely/js-sdk-utils');
1819
var MAX_NUMBER_LIMIT = Math.pow(2, 53);
1920

2021
module.exports = {
@@ -29,7 +30,15 @@ module.exports = {
2930
isFinite: function(number) {
3031
return _isFinite(number) && Math.abs(number) <= MAX_NUMBER_LIMIT;
3132
},
32-
keyBy: require('lodash/keyBy'),
33+
keyBy: function(arr, callback) {
34+
if (!arr) return {};
35+
if (typeof callback === 'string' || callback instanceof String) {
36+
return keyBy(arr, function(item) {
37+
return item[callback];
38+
});
39+
}
40+
return keyBy(arr, callback);
41+
},
3342
filter: require('lodash/filter'),
3443
forEach: require('lodash/forEach'),
3544
forOwn: require('lodash/forOwn'),

packages/optimizely-sdk/lib/utils/fns/index.tests.js

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,52 @@ describe('lib/utils/fns', function() {
3737
assert.isTrue(fns.isFinite(-Math.pow(2, 53)));
3838
});
3939
});
40+
describe('keyBy', function() {
41+
it('should return correct object if callback is a function', function() {
42+
var arr = [
43+
{ key1: 'row1', key2: 'key2row1' },
44+
{ key1: 'row2', key2: 'key2row2' },
45+
{ key1: 'row3', key2: 'key2row3' },
46+
{ key1: 'row4', key2: 'key2row4' },
47+
];
48+
49+
var obj = fns.keyBy(arr, function(item) {
50+
return item['key1'];
51+
});
52+
53+
assert.deepEqual(obj, {
54+
row1: { key1: 'row1', key2: 'key2row1' },
55+
row2: { key1: 'row2', key2: 'key2row2' },
56+
row3: { key1: 'row3', key2: 'key2row3' },
57+
row4: { key1: 'row4', key2: 'key2row4' }
58+
});
59+
});
60+
61+
it('should return correct object if callback is a string key', function() {
62+
var arr = [
63+
{ key1: 'row1', key2: 'key2row1' },
64+
{ key1: 'row2', key2: 'key2row2' },
65+
{ key1: 'row3', key2: 'key2row3' },
66+
{ key1: 'row4', key2: 'key2row4' },
67+
];
68+
69+
var obj = fns.keyBy(arr, 'key1');
70+
71+
assert.deepEqual(obj, {
72+
row1: { key1: 'row1', key2: 'key2row1' },
73+
row2: { key1: 'row2', key2: 'key2row2' },
74+
row3: { key1: 'row3', key2: 'key2row3' },
75+
row4: { key1: 'row4', key2: 'key2row4' }
76+
});
77+
});
78+
79+
it('should return empty object when first argument is null or undefined', function() {
80+
var obj = fns.keyBy(null, 'key1');
81+
assert.isEmpty(obj);
82+
83+
obj = fns.keyBy(undefined, 'key1');
84+
assert.isEmpty(obj);
85+
});
86+
});
4087
});
41-
});
88+
});

0 commit comments

Comments
 (0)