lobe-chat

Форк
0
/
difference.ts 
26 строк · 982.0 Байт
1
import isEqual from 'fast-deep-equal';
2
import { isArray, isObject, transform } from 'lodash-es';
3

4
/**
5
 * Compare two objects and return the difference.
6
 * when there are difference in array, just return the new value.
7
 * it's used mostly in settings
8
 */
9
export const difference = <T extends object>(object: T, base: T) => {
10
  const changes = (object: any, base: any) =>
11
    transform(object, (result: any, value, key) => {
12
      // First, check if value and base[key] are both arrays.
13
      // If they are arrays, we directly use isEqual to compare their values.
14
      if (isArray(value) && isArray(base[key])) {
15
        if (!isEqual(value, base[key])) {
16
          result[key] = value;
17
        }
18
      }
19
      // If they are objects, we recursively call changes to compare their values.
20
      else if (!isEqual(value, base[key])) {
21
        result[key] = isObject(value) && isObject(base[key]) ? changes(value, base[key]) : value;
22
      }
23
    });
24

25
  return changes(object, base);
26
};
27

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.