diff options
author | Parth Yadav <parth.yadav@ramanujan.du.ac.in> | 2020-08-24 12:36:19 +0530 |
---|---|---|
committer | Parth Yadav <parth.yadav@ramanujan.du.ac.in> | 2020-08-24 12:44:21 +0530 |
commit | 3c25e018d2169e982cf5a292dd20cbee2a117336 (patch) | |
tree | 0b83a6ce78a6afde9195de4a1a978eb3a89b0798 /sdv/docker/sdvmodel/website/mergeDeep.js | |
parent | 69f4c631e49c359338cff5c9f5b2c96c6fe6b280 (diff) |
Init Resource Modelling Tool
Tool for resource planning of VNFs.
Signed-off-by: Parth Yadav<parthyadav3105@gmail.com>
Change-Id: I4729d665707162132b16765b3ba2d7a9d914d339
Diffstat (limited to 'sdv/docker/sdvmodel/website/mergeDeep.js')
-rw-r--r-- | sdv/docker/sdvmodel/website/mergeDeep.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sdv/docker/sdvmodel/website/mergeDeep.js b/sdv/docker/sdvmodel/website/mergeDeep.js new file mode 100644 index 0000000..970983a --- /dev/null +++ b/sdv/docker/sdvmodel/website/mergeDeep.js @@ -0,0 +1,46 @@ +/* Copyright 2020 University Of Delhi. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +/** +* Performs a deep merge of objects and returns new object. Does not modify +* objects (immutable) and merges arrays via concatenation. +* +* @param {...object} objects - Objects to merge +* @returns {object} New object with merged key/values +*/ +function mergeDeep(...objects) { + const isObject = obj => obj && typeof obj === 'object'; + + return objects.reduce((prev, obj) => { + Object.keys(obj).forEach(key => { + const pVal = prev[key]; + const oVal = obj[key]; + + if (Array.isArray(pVal) && Array.isArray(oVal)) { + prev[key] = pVal.concat(...oVal); + } + else if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeep(pVal, oVal); + } + else { + prev[key] = oVal; + } + }); + + return prev; + }, {}); +} + |