Я новичок в 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
любая помощь!
Отвечает ли это на ваш вопрос? Как удалить ключ из объекта JavaScript?
дубликат: Javascript удаляет свойства вложенных объектов по имени
Вы можете использовать рекурсивный алгоритм:
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
В вашем коде 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
}
}
Я не понизил голос, и идея использовать деструктурирование интересна, потому что она позволяет избежать мутации оригинала. Чтобы заставить его работать на вопрос ОП, вам нужно использовать рекурсию, которая немного сложнее, чем другие ответы, из-за эффекта клонирования в игре. См. пример здесь: рабочий пример
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.