猿问

如何重构 json 数组?


我有一个数据结构,这样在每个孩子中有字段,这些字段之一是另一个对象。像这样:


[ 0: {

      a: "a"

      b: "b"

      c: "c"

      d: "d"

      user: {

          id: "1", 

          f: "f"

         }

     },

  1: {

      a: "a"

      b: "b"

      c: "c"

      d: "d"

      user: {

          id: "2", 

          f: "f"

         }

     },

  2: {

      a: "a"

      b: "b"

      c: "c"

      d: "d"

      user: {

          id: "1", 

          f: "f"

         }

     }

]

我想以某种方式反转它或重组它,以便所有字段都在包含对象的字段内,如果重复 id 合并它,我将尝试举例说明它:


    [ 0: {

      user: [{

          id: "1", 

          f: "f",

          a: "a"

          b: "b"

          c: "c"

          d: "d"

         },{

          id: "1", 

          f: "f",

          a: "a"

          b: "b"

          c: "c"

          d: "d"

         }]

     },

  1: {

      user: {

          id: "2", 

          f: "f",

          a: "a",

          b: "b",

          c: "c",

          d: "d",

         }

     }

]


蝴蝶刀刀
浏览 190回答 2
2回答

侃侃无极

const input =  { 0: { c: 1, d: 2, e: { a: 3, b: 4 } }};const mapObj = (obj, map) => Object.fromEntries(Object.entries(obj).map(([k, v]) => ([k, map(v)])));const result = mapObj(input, ({ c, d, e }) => ({ e: { c, d, ...e }}));console.log(result);您可以使用对象解构来获取对象,然后组合新对象。

智慧大石

对于完整的动态方法,您可以查找属性作为对象并收集键,如果不收集对象中的属性,以便稍后将这些属性分配给单个嵌套对象。如有必要,如果找到多个嵌套属性,则迭代嵌套属性。function refine(object) {    var temp = {},        target = [],        remove = [];    Object.entries(object).forEach(([k, v]) => {        if (v && typeof v === 'object') {            target.push(k);            return;        }        temp[k] = v;        remove.push(k);    });    if (target.length === 1) {        Object.assign(object[target[0]], temp);        remove.forEach(k => delete object[k]);    }    target.forEach(k => refine(object[k]));}var data =  { 0: { c: 1, d: 2, e: { a: 3, b: 4} }, 1: { c: 5, d: 6, e: { a: 7, b: 8 } } };refine(data);console.log(data);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答