javascript - 在 JavaScript 中重构 JSON 文件

标签 javascript json reformat

我有一个名为“from”的 JSON,我想将其转换为“to”,如下所示。实现这一目标最快、最有效的方法是什么?是否可以一步完成或者我应该首先减少重复项?:

  const from =[{ 
    NUM: '1234001',
    SUBNUM: '001'},
  { 
    NUM: '1234001',
    SUBNUM: '001'},
  { 
    NUM: '1234002',
    SUBNUM: '002'},
  { 
    NUM: '1234005',
    SUBNUM: '005'},
  { 
    NUM: '4567001',
    SUBNUM: '001'},
  { 
    NUM: '9999001',
    SUBNUM: '001'}
];


const to = [{
  label: 'SUBNUM',
  submenu: [{
    label: '1234',
    role: '1234',
       submenu: [{
         label: '001',
         role: '001'
       },
       {
         label: '002',
         role: '002'
       },
       {
         label: '005',
         role: '005'
       }]
    },{
    label: '4567',
    role: '4567',
       submenu: [{
         label: '001',
         role: '001'
       }]
    },{
    label: '9999',
    role: '9999',
       submenu: [{
         label: '001',
         role: '001'
       }]
  }
  ]}];

最佳答案

您可以尝试以下代码:

let items = [];

from.forEach(obj => {
    let numTruncated = obj.NUM.replace(obj.SUBNUM, "");
    let currentNum = items.find(n => n.label === numTruncated);
    if(!currentNum ) {
        currentNum = {
            label: numTruncated,
            role: numTruncated,
            submenu: []
        };
        items.push(currentNum );
    }

    if(!currentNum .submenu.find(item => item.label === obj.SUBNUM)){
        currentNum .submenu.push({ label: obj.SUBNUM, role: obj.SUBNUM });
    }

});

let output = { label: "SUBNUM", submenu: items };

find 如果没有与指定箭头函数匹配的元素,则返回 undefined,使用字符串原型(prototype)中的 replace 删除 SUBNUM

关于javascript - 在 JavaScript 中重构 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50121648/

相关文章:

javascript - 如何将逻辑/数学运算符分配给对象的函数?

javascript - 如何获取多个选择框值并插入字符串数组

intellij-idea - IntelliJ IDEA 12保持空白行

sql - 寻求 T-SQL 的 GUI 自动格式化功能

javascript - JSON.parse 是如何工作的?

vim - 使用 vim-latex gq 时会导致字幕突出

javascript - 在 Javascript 中对哈希值实现暴力攻击

javascript - 根据表单结果初始化谷歌地图

javascript - Gulp 注入(inject)不能以一种方式工作,但以另一种方式工作——没有区别吗?

java - 使用 javax.json 从列表创建 json