У меня есть вложенная структура json, как показано ниже
const data = {
"name": "A",
"invalid": {
"distinctCountOnColumns": [
{
"key": "some_key",
"value": 101557856
}
],
"groupByAndCountOnColumns": [
[
{
"key": "some_key",
"value": "no data",
"count": 101557856
}
],
]
},
"children": [
{
"name": "B",
"count": 1654164,
"children": [
{
"name": "B1",
"count": 16564,
},
{
"name": "B2",
"count": 165411,
}
]
},
{
"name": "C",
"count": 15135
}
]
}
Я хочу добавить ключ с именем значение рядом с ключом count , скопировав значение ключа count . Но ключ count внутри объекта invalid не должен рассматриваться. Результирующие данные приведены ниже
const resultData = {
"name": "A",
"invalid": {
"distinctCountOnColumns": [
{
"key": "some_key",
"count": 192869,
"value": 101557856
}
],
"groupByAndCountOnColumns": [
[
{
"key": "some_key",
"value": "no data",
"count": 101557856
}
],
]
},
"children": [
{
"name": "B",
"count": 1654164,
"value": 1654164,
"children": [
{
"name": "B1",
"count": 16564,
"value": 16564
},
{
"name": "B2",
"count": 165411,
"value": 165411
}
]
},
{
"name": "C",
"count": 15135,
"value": 15135
}
]
}
Я пробовал этот метод, но ключ значение не добавляется рядом с ключом count .
const deepCopy = (arr) => {
let copy = [];
arr.forEach(elem => {
if(Array.isArray(elem)){
copy.push(deepCopy(elem))
}else{
if (typeof elem === 'object') {
copy.push(deepCopyObject(elem))
} else {
copy.push(elem)
}
}
})
return copy;
};
const deepCopyObject = (obj) => {
let tempObj = {};
for (let [key, value] of Object.entries(obj)) {
if(key !== "invalid" && key === "count"){
obj.value = obj[key];
}
if (Array.isArray(value)) {
tempObj[key] = deepCopy(value);
} else {
if (typeof value === 'object') {
tempObj[key] = deepCopyObject(value);
} else {
tempObj[key] = value
}
}
}
return tempObj;
};
const resultData = deepCopyObject(data);
console.log("result", data)