diff options
Diffstat (limited to 'devtools/client/netmonitor/src/utils/sort-utils.js')
-rw-r--r-- | devtools/client/netmonitor/src/utils/sort-utils.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/utils/sort-utils.js b/devtools/client/netmonitor/src/utils/sort-utils.js new file mode 100644 index 0000000000..a7f49417e8 --- /dev/null +++ b/devtools/client/netmonitor/src/utils/sort-utils.js @@ -0,0 +1,42 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Sorts object by keys in alphabetical order + * If object has nested children, it sorts the child-elements also by keys + * @param {object} which should be sorted by keys in alphabetical order + */ +function sortObjectKeys(object) { + if (object == null) { + return null; + } + + if (Array.isArray(object)) { + for (let i = 0; i < object.length; i++) { + if (typeof object[i] === "object") { + object[i] = sortObjectKeys(object[i]); + } + } + return object; + } + + return Object.keys(object) + .sort(function (left, right) { + return left.toLowerCase().localeCompare(right.toLowerCase()); + }) + .reduce((acc, key) => { + if (typeof object[key] === "object") { + acc[key] = sortObjectKeys(object[key]); + } else { + acc[key] = object[key]; + } + return acc; + }, Object.create(null)); +} + +module.exports = { + sortObjectKeys, +}; |