Удалить свойство и его значения во всех объектах

Я новичок в javaScript, у меня есть этот объект MyGraph:

const MyGraph = {
    a: { b: 5, c: 2 },
    b: { a: 5, c: 7, d: 8 },
    c: { a: 2, b: 7, d: 4, e: 8 },
};

Я хочу удалить свойство "a" и его значения в других свойствах, чтобы получить этот результат:

const MyGraph = {
    b: { c: 7, d: 8 },
    c: { b: 7, d: 4, e: 8 },
};

Я пробовал так:

for(let XXX of Object.keys(MyGraph)){
    console.info(XXX.a);
    delete XXX.a;
}

результат выполнения:

undefined
undefined
undefined

любая помощь!

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 23.04.2022 13:38

Отвечает ли это на ваш вопрос? Как удалить ключ из объекта JavaScript?

Ahmet Firat Keler 23.04.2022 13:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать рекурсивный алгоритм:

function del_entries(key, obj) {
  if (obj.hasOwnProperty(key)) {
    delete obj[key];
  }

  // Or with Object.hasOwn, not fully supported by old browsers but more up to date
 /*
 if (Object.hasOwn(obj, key)) {
     delete obj[key]
 }
 */
  
  Object.values(obj).forEach(o=> del_entries(key, o))
}


const MyGraph = {
    a: { b: 5, c: 2 },
    b: { a: 5, c: 7, d: 8 },
    c: { a: 2, b: 7, d: 4, e: 8 },
};

del_entries("a", MyGraph);

console.info(MyGraph)

теперь вы можете порекомендовать новый hasOwn(), который заботится о вопросы с помощью hasOwnProperty

pilchard 23.04.2022 13:45

В вашем коде XXX является ключом. Вам нужно сделать graph[XXX], чтобы получить доступ к фактическому объекту. Так что вместо XXX.a вы должны сделать graph[XXX].a. Но это относится только к объектам в graph, у которых есть ключ a. Вам также необходимо учитывать ключ a в graph. Пожалуйста, смотрите код ниже. Это элементарный пример.

Если у вас есть один уровень вложенности, вы можете использовать код ниже.

const mygraph = {
  a: { b: 5, c: 2 },
  b: { a: 5, c: 7, d: 8 },
  c: { a: 2, b: 7, d: 4, e: 8 },
};

console.info(mygraph);

function deletePropAndValuesOf(key, graph) {

  for (const k of Object.keys(graph)) {
    if (k === key) {
      delete graph[key];
    } else {
      if (key in graph[k]) {
        delete graph[k][key]
      }
    }
  }
}

deletePropAndValuesOf("a", graph);

console.info(mygraph);

Вы можете скопировать код в файл .js и запустить его с помощью node. например

Я использовал деструктурирование объекта, чтобы удалить первый массив с a, но не мог понять, как сделать все a, но код ниже может помочь?

const MyGraph = {
a: { b: 5, c: 2 },
b: { a: 5, c: 7, d: 8 },
c: { a: 2, b: 7, d: 4, e: 8 }};
const {a, ...newMyGraph} = MyGraph;
// output
console.info(newMyGraph)

возвращается

b: {
   a: 5,
   c: 7,
   d: 8
},
c: {
   a: 2,
   b: 7,
   d: 4,
   e: 8
}
}

Я не понизил голос, и идея использовать деструктурирование интересна, потому что она позволяет избежать мутации оригинала. Чтобы заставить его работать на вопрос ОП, вам нужно использовать рекурсию, которая немного сложнее, чем другие ответы, из-за эффекта клонирования в игре. См. пример здесь: рабочий пример

pilchard 23.04.2022 14:41

Другие вопросы по теме