You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.1 KiB
108 lines
3.1 KiB
11 months ago
|
/**
|
||
|
* @license
|
||
|
* Cesium - https://github.com/CesiumGS/cesium
|
||
|
* Version 1.99
|
||
|
*
|
||
|
* Copyright 2011-2022 Cesium Contributors
|
||
|
*
|
||
|
* 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.
|
||
|
*
|
||
|
* Columbus View (Pat. Pend.)
|
||
|
*
|
||
|
* Portions licensed separately.
|
||
|
* See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
|
||
|
*/
|
||
|
|
||
|
define(['exports', './defaultValue-135942ca'], (function (exports, defaultValue) { 'use strict';
|
||
|
|
||
|
/**
|
||
|
* Merges two objects, copying their properties onto a new combined object. When two objects have the same
|
||
|
* property, the value of the property on the first object is used. If either object is undefined,
|
||
|
* it will be treated as an empty object.
|
||
|
*
|
||
|
* @example
|
||
|
* const object1 = {
|
||
|
* propOne : 1,
|
||
|
* propTwo : {
|
||
|
* value1 : 10
|
||
|
* }
|
||
|
* }
|
||
|
* const object2 = {
|
||
|
* propTwo : 2
|
||
|
* }
|
||
|
* const final = Cesium.combine(object1, object2);
|
||
|
*
|
||
|
* // final === {
|
||
|
* // propOne : 1,
|
||
|
* // propTwo : {
|
||
|
* // value1 : 10
|
||
|
* // }
|
||
|
* // }
|
||
|
*
|
||
|
* @param {Object} [object1] The first object to merge.
|
||
|
* @param {Object} [object2] The second object to merge.
|
||
|
* @param {Boolean} [deep=false] Perform a recursive merge.
|
||
|
* @returns {Object} The combined object containing all properties from both objects.
|
||
|
*
|
||
|
* @function
|
||
|
*/
|
||
|
function combine(object1, object2, deep) {
|
||
|
deep = defaultValue.defaultValue(deep, false);
|
||
|
|
||
|
const result = {};
|
||
|
|
||
|
const object1Defined = defaultValue.defined(object1);
|
||
|
const object2Defined = defaultValue.defined(object2);
|
||
|
let property;
|
||
|
let object1Value;
|
||
|
let object2Value;
|
||
|
if (object1Defined) {
|
||
|
for (property in object1) {
|
||
|
if (object1.hasOwnProperty(property)) {
|
||
|
object1Value = object1[property];
|
||
|
if (
|
||
|
object2Defined &&
|
||
|
deep &&
|
||
|
typeof object1Value === "object" &&
|
||
|
object2.hasOwnProperty(property)
|
||
|
) {
|
||
|
object2Value = object2[property];
|
||
|
if (typeof object2Value === "object") {
|
||
|
result[property] = combine(object1Value, object2Value, deep);
|
||
|
} else {
|
||
|
result[property] = object1Value;
|
||
|
}
|
||
|
} else {
|
||
|
result[property] = object1Value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (object2Defined) {
|
||
|
for (property in object2) {
|
||
|
if (
|
||
|
object2.hasOwnProperty(property) &&
|
||
|
!result.hasOwnProperty(property)
|
||
|
) {
|
||
|
object2Value = object2[property];
|
||
|
result[property] = object2Value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
exports.combine = combine;
|
||
|
|
||
|
}));
|