Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过在嵌套json结构中复制javascript中特定键的值来追加键值对_Javascript_Arrays_Object - Fatal编程技术网

通过在嵌套json结构中复制javascript中特定键的值来追加键值对

通过在嵌套json结构中复制javascript中特定键的值来追加键值对,javascript,arrays,object,Javascript,Arrays,Object,我有一个嵌套的json结构,如下所示 const data = { "name": "A", "invalid": { "distinctCountOnColumns": [ { "key": "some_key", "value": 101557856 } ], "groupByAndCountOnColumns": [ [ {

我有一个嵌套的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旁边附加一个名为value的键。但不应考虑对象内的键计数无效。 结果数据如下所示

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)

您可以创建接收数据的递归函数,并添加新旧键。它还检查某些父元素是否具有无效的键值,忽略该对象及其子元素

const data={“name”:“A”,“invalid”:{“distinctcontontoncolumns”:[{“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},,“no data”,“count”:“name”C”,“count
函数更新(数据、oldKey、newKey、isValid=true){
if(数据中的oldKey&&isValid){
数据[newKey]=数据[oldKey]
}
for(让我输入数据){
如果(有效){
if(数据类型[i]=“对象”){
更新(数据[i]、oldKey、newKey、isValid&&i!=“无效”)
}
}
}
}
更新(数据“计数”、“值”)
console.log(数据)