@whitesev/utils 2.9.6 → 2.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -313,38 +313,44 @@ var Utils = (function () {
313
313
  if (target == null) {
314
314
  target = {};
315
315
  }
316
+ // 当前遍历的目标对象
317
+ let iteratorTarget;
316
318
  if (isAdd) {
317
- for (const sourceKeyName in source) {
318
- const targetKeyName = sourceKeyName;
319
- const targetValue = Reflect.get(target, targetKeyName);
320
- const sourceValue = Reflect.get(source, sourceKeyName);
321
- if (typeof sourceValue === "object" &&
322
- sourceValue != null &&
323
- sourceKeyName in target &&
324
- !UtilsContext.isDOM(sourceValue)) {
325
- /* 源端的值是object类型,且不是元素节点 */
326
- Reflect.set(target, sourceKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
327
- continue;
328
- }
329
- Reflect.set(target, sourceKeyName, sourceValue);
330
- }
319
+ // 追加并覆盖是以source为准
320
+ iteratorTarget = source;
331
321
  }
332
322
  else {
333
- for (const targetKeyName in target) {
334
- if (targetKeyName in source) {
335
- const targetValue = Reflect.get(target, targetKeyName);
336
- const sourceValue = Reflect.get(source, targetKeyName);
337
- if (typeof sourceValue === "object" &&
338
- sourceValue != null &&
339
- !UtilsContext.isDOM(sourceValue) &&
340
- Object.keys(sourceValue).length) {
341
- /* 源端的值是object类型,且不是元素节点 */
342
- Reflect.set(target, targetKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
343
- continue;
323
+ // 覆盖以target为准
324
+ iteratorTarget = target;
325
+ }
326
+ for (const keyName in iteratorTarget) {
327
+ if (!isAdd && !(keyName in source)) {
328
+ // 仅替换 但是源端没有此键
329
+ continue;
330
+ }
331
+ const targetValue = Reflect.get(target, keyName);
332
+ const sourceValue = Reflect.get(source, keyName);
333
+ if (typeof sourceValue === "object" &&
334
+ sourceValue != null &&
335
+ keyName in target &&
336
+ !UtilsContext.isDOM(sourceValue)) {
337
+ // 源端的值是object类型,且不是元素节点
338
+ // 如果是数组,那此数组中有值,清空旧的数组再赋值
339
+ let childObjectValue;
340
+ if (Array.isArray(sourceValue)) {
341
+ if (Array.isArray(targetValue)) {
342
+ targetValue.length = 0;
344
343
  }
345
- /* 直接赋值 */
346
- Reflect.set(target, targetKeyName, sourceValue);
344
+ childObjectValue = sourceValue;
345
+ }
346
+ else {
347
+ childObjectValue = UtilsContext.assign(targetValue, sourceValue, isAdd);
347
348
  }
349
+ Reflect.set(target, keyName, childObjectValue);
350
+ }
351
+ else {
352
+ /* 直接赋值 */
353
+ Reflect.set(target, keyName, sourceValue);
348
354
  }
349
355
  }
350
356
  return target;
@@ -5493,7 +5499,7 @@ var Utils = (function () {
5493
5499
  }
5494
5500
  const domUtils = new DOMUtils();
5495
5501
 
5496
- const version = "2.9.6";
5502
+ const version = "2.9.7";
5497
5503
 
5498
5504
  class Utils {
5499
5505
  windowApi;