Sobes.tech
Middle+
25

Карта/Жинақ және объектілер қалай көшіріледі? Жоғары деңгейлі және терең көшірме.

Сұралған компаниялар
М.Видео/эльдорадо

AI-дан жауап

sobes.tech AI

JavaScript-те Map, Set және объектілерді көшіру үшін үстірт және терең көшіру әдістері бар.

Үстірт көшіру:

  • Объектілер үшін Object.assign({}, obj) немесе кеңейту операторы {...obj} қолдануға болады. Бұл тек бірінші деңгейдегі қасиеттерді көшіріп, ішкі объектілер сілтеме ретінде қалады.
  • Map және Set үшін жаңа экземпляр құрып, бастапқы мәндерді конструкторға беру арқылы жасауға болады:
    const newMap = new Map(oldMap);
    const newSet = new Set(oldSet);
    
    Бұл жаңа Map/Set құрып, сол элементтерді көшіріп алады, бірақ элементтер терең көшірілмейді.

Терең көшіру:

  • Объектілер үшін рекурсивті функция қолдануға болады, ол ішкі объектілер мен массивтерді көшіріп алады.
  • Map және Set үшін олардың элементтерін рекурсивті түрде көшіріп алу керек, егер олар да объектілер болса.

Мысал ретінде Map және Set бар объектінің терең көшірмесі:

function deepCopy(value) {
  if (value instanceof Map) {
    const copiedMap = new Map();
    for (const [key, val] of value.entries()) {
      copiedMap.set(key, deepCopy(val));
    }
    return copiedMap;
  }
  if (value instanceof Set) {
    const copiedSet = new Set();
    for (const val of value.values()) {
      copiedSet.add(deepCopy(val));
    }
    return copiedSet;
  }
  if (Array.isArray(value)) {
    return value.map(deepCopy);
  }
  if (value && typeof value === 'object') {
    const copiedObj = {};
    for (const key in value) {
      if (value.hasOwnProperty(key)) {
        copiedObj[key] = deepCopy(value[key]);
      }
    }
    return copiedObj;
  }
  return value; // примитивтер
}

Осылайша, үстірт көшіру тек жоғарғы деңгейді көшірсе, ал терең — барлық ішкі құрылымдарды көшіріп алады.