<script src='https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js'></script>
function randomString() {
var length = Math.ceil(Math.random() * 100);
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var text = '';
for (var i=0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}
function createObject() {
return {
num1: Math.random(),
num2: Math.random(),
num3: Math.random(Math.random()),
str1: randomString(),
str2: randomString(),
str3: randomString(),
bool1: true,
bool2: false,
obj1: {
prop1: randomString(),
prop2: Math.random(),
prop3: true,
},
obj2: {
prop1: randomString(),
prop2: Math.random(),
prop3: false,
},
arr1: [1,2,3,4,5,6,7,8,9,0],
arr2: [
randomString(),
randomString(),
randomString(),
randomString(),
randomString(),
randomString(),
randomString(),
],
}
}
collection = Array(1000).fill(0).map(createObject);
const mapped = collection.map((data) => ({
_(data).pick('num3', 'str1', 'str2', 'bool2', 'arr1', 'obj1'),
num1: data.num1 + 10,
num2: data.num2 + 10,
str3: data.str3 + '12345',
bool1: false,
obj2: { data.obj2, prop1: '1212212'},
arr2: [data.arr2[0], data.arr2[1], data.arr2[2]]
}));
const mapped = collection.map((data) => ({
_.pick(data, 'num3', 'str1', 'str2', 'bool2', 'arr1', 'obj1'),
num1: data.num1 + 10,
num2: data.num2 + 10,
str3: data.str3 + '12345',
bool1: false,
obj2: { data.obj2, prop1: '1212212'},
arr2: [data.arr2[0], data.arr2[1], data.arr2[2]]
}));
const mapped = collection.map((data) => ({
_(data).omit('num1', 'num2', 'str3', 'bool1', 'obj2', 'arr2'),
num1: data.num1 + 10,
num2: data.num2 + 10,
str3: data.str3 + '12345',
bool1: false,
obj2: { data.obj2, prop1: '1212212'},
arr2: [data.arr2[0], data.arr2[1], data.arr2[2]]
}));
const mapped = collection.map((data) => ({
_.omit(data, 'num1', 'num2', 'str3', 'bool1', 'obj2', 'arr2'),
num1: data.num1 + 10,
num2: data.num2 + 10,
str3: data.str3 + '12345',
bool1: false,
obj2: { data.obj2, prop1: '1212212'},
arr2: [data.arr2[0], data.arr2[1], data.arr2[2]]
}));
const mapped = collection.map((data) => ({
data,
num1: data.num1 + 10,
num2: data.num2 + 10,
str3: data.str3 + '12345',
bool1: false,
obj2: { data.obj2, prop1: '1212212'},
arr2: [data.arr2[0], data.arr2[1], data.arr2[2]]
}));
const mapped = collection.map((data) => ({
num1: data.num1 + 10,
num2: data.num2 + 10,
num3: data.num3,
str1: data.str1,
str2: data.str2,
str3: data.str3 + '12345',
bool1: false,
bool2: data.bool2,
obj1: data.obj1,
obj2: { data.obj2, prop1: '1212212'},
arr1: data.arr1,
arr2: [data.arr2[0], data.arr2[1], data.arr2[2]]
}));
const mapped = collection.map((data) => {
data.num1 += 10;
data.num2 += 10;
data.str3 += '12345';
data.bool1 = false;
data.obj2.prop1 = '1212212';
data.arr2.length = 3;
return data;
});
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
underscorePick1 | |
underscorePick2 | |
underscoreOmit1 | |
underscoreOmit2 | |
objectUnion | |
objectCreate | |
objectUpdate |
Test name | Executions per second |
---|---|
underscorePick1 | 246.3 Ops/sec |
underscorePick2 | 221.8 Ops/sec |
underscoreOmit1 | 208.9 Ops/sec |
underscoreOmit2 | 150.3 Ops/sec |
objectUnion | 9197.8 Ops/sec |
objectCreate | 11407.9 Ops/sec |
objectUpdate | 9338.0 Ops/sec |
I'm ready to help! What's the task at hand? Do you need me to analyze the benchmark results, identify any patterns or trends, or perhaps provide some insights on how to optimize the code being tested? Let me know what's on your mind!