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

Я новичок в 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.log(XXX.a);
    delete XXX.a;
}

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

undefined
undefined
undefined

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

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

Community 23.04.2022 13:38

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

Ahmet Firat Keler 23.04.2022 13:39
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
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.log(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.log(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.log(mygraph);

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

Я использовал деструктурирование объекта, чтобы удалить первый массив с 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.log(newMyGraph)

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

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

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

pilchard 23.04.2022 14:41

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