为了账号安全,请及时绑定邮箱和手机立即绑定

如何重构 json 数组?

如何重构 json 数组?

蝴蝶刀刀 2021-10-07 11:03:57
我有一个数据结构,这样在每个孩子中有字段,这些字段之一是另一个对象。像这样:[ 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",         }     }]
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

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);

您可以使用对象解构来获取对象,然后组合新对象。


查看完整回答
反对 回复 2021-10-07
?
智慧大石

TA贡献1946条经验 获得超3个赞

对于完整的动态方法,您可以查找属性作为对象并收集键,如果不收集对象中的属性,以便稍后将这些属性分配给单个嵌套对象。


如有必要,如果找到多个嵌套属性,则迭代嵌套属性。


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);


查看完整回答
反对 回复 2021-10-07
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信