как очистить объект js в том числе и вложенный в цикле?
Как всем свойствам присвоить значение 0?
data: {
one:{
x: 10,
y:20
},
two:{
x: 10,
y:20
},
three:{
object1:{
x: 10,
y:20
},
object2:{
x: 10,
y:20
},
}
}
Ответы (2 шт):
Автор решения: vsemozhebuty
→ Ссылка
Можно попробовать рекурсивно:
const object = {
data: {
one:{
x: 10,
y: 20
},
two:{
x: 10,
y: 20
},
three:{
object1:{
x: 10,
y: 20
},
object2:{
x: 10,
y: 20
},
}
}
};
reset(object);
console.log(JSON.stringify(object, null, ' '));
function reset(obj) {
for (const [key, value] of Object.entries(obj)) {
if (typeof value === 'object' && value !== null) reset(value);
else obj[key] = 0;
}
}
Автор решения: yar85
→ Ссылка
В случае таких вот простых значений с заранее известной схемой (в данном случае { x: Number, y: Number }), можно использовать обычную строковую замену на сериализованном представлении объекта:
const foo = {
data: {
one: { x: 10, y: 20 },
two: { x: 10, y: 20 },
three: {
object1: { x: 10, y: 20 },
object2: { x: 10, y: 20 },
},
},
};
const reset = obj => JSON.parse(
JSON.stringify(foo).replace(/{\s*"[xy]":[^}]+}/g, '{ "x": 0, "y": 0 }')
);
console.log(reset(foo));
Этот подход должен работать быстрее прочих, но весьма опасен: его не следует использовать в случаях когда схема вложенных объектов может варьироваться (ошибочно совпадая с указанным шаблоном замены).