아래와 같이 중첩 된 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
}
]
}
나는 키라고 추가 할 값을 키 옆에 수를 키의 값을 복사하여 카운트를 . 그러나 유효하지 않은 객체 내부 의 키 수 는 고려되지 않아야합니다. 결과 데이터는 다음과 같습니다.
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
}
]
}
이 방법을 시도했지만 키 값 이 키 개수 옆에 추가되지 않습니다 .
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)
데이터를받는 재귀 함수를 만들 수 있으며 이전 키와 새 키가 추가됩니다. 또한 일부 부모 요소에 invalid
키 값 이 있는지 확인하여 해당 개체와 자식을 무시합니다.
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}]}
function update(data, oldKey, newKey, isValid = true) {
if (oldKey in data && isValid) {
data[newKey] = data[oldKey]
}
for (let i in data) {
if (isValid) {
if (typeof data[i] == 'object') {
update(data[i], oldKey, newKey, isValid && i !== 'invalid')
}
}
}
}
update(data, 'count', 'value')
console.log(data)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다