jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
<script>
function controlUnflatten(data) {
"use strict";
if (Object(data) !== data || Array.isArray(data))
return data;
var result = {}, cur, prop, parts, idx;
for(var p in data) {
cur = result, prop = "";
parts = p.split(".");
for(var i=0; i<parts.length; i++) {
idx = !isNaN(parseInt(parts[i]));
cur = cur[prop] || (cur[prop] = (idx ? [] : {}));
prop = parts[i];
}
cur[prop] = data[p];
}
return result[""];
}
function testUnflatten(table) {
var result = {};
for (var path in table) {
var cursor = result, length = path.length, property = "", index = 0;
while (index < length) {
var char = path.charAt(index);
if (char === "[") {
var start = index + 1,
end = path.indexOf("]", start),
cursor = cursor[property] = cursor[property] || [],
property = path.slice(start, end),
index = end + 1;
} else {
var cursor = cursor[property] = cursor[property] || {},
start = char === "." ? index + 1 : index,
bracket = path.indexOf("[", start),
dot = path.indexOf(".", start);
if (bracket < 0 && dot < 0) var end = index = length;
else if (bracket < 0) var end = index = dot;
else if (dot < 0) var end = index = bracket;
else var end = index = bracket < dot ? bracket : dot;
var property = path.slice(start, end);
}
}
cursor[property] = table[path];
}
return result[""];
}
</script>
var object = {
"related[0].related": [],
"related[0].id": 1759807323,
"related[0].name": "First Related name",
"related[0].subs[0]": 1,
"related[0].subs[1][0]": 1,
"related[0].subs[1][1]": 2,
"related[0].subs[2].name": "Does it work?",
"related[0].subs[2].created": "2014-12-22T22:30:32.234Z",
"related[0].interest.id": 1314962015,
"related[0].interest.name": "Ideas",
"related[0].interest.isLocked": false,
"related[0].interest.isPrivileged": false,
"related[0].details": "Lengthy related details that will not be sent to server",
"related[0].author.id": 28356342,
"related[0].author.displayName": "John Doe",
"related[0].author.email": "john.doe@gmail.com",
"related[0].author.isActive": true,
"related[1].name": "Afrojack",
"related[1].title": "Some related title",
"related[1].details": "Another one with lengthy details",
"related[1].id": 2345234,
"related[1].interest.id": 1314962015,
"related[1].interest.name": "Ideas",
"related[1].interest.isLocked": false,
"related[1].interest.isPrivileged": false,
"related[1].author.id": 28356342,
"related[1].author.displayName": "Jane Doe",
"related[1].author.email": "jane.doe@gmail.com",
"related[1].author.isActive": true,
"related[1].author.spouse.id": 87962347,
"related[1].author.spouse.displayName": "Jorge Lopez",
"related[1].author.spouse.email": "jorge.lopez@gmail.com",
"related[1].author.spouse.isActive": true,
"hash": {},
"name": "My name",
"interest.id": 1314962015,
"interest.name": "Ideas",
"interest.isLocked": false,
"interest.isPrivileged": false,
"details": "Some lengthy details"
};
Ready to run.
Test | Ops/sec | |
---|---|---|
Test unflatten |
| ready |
Control unflatten |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.