首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中对JSON进行分组和排序,同时维护原始键

在Javascript中对JSON进行分组和排序,同时维护原始键
EN

Stack Overflow用户
提问于 2017-07-11 16:12:22
回答 2查看 1.4K关注 0票数 0

我正在寻找一种方法来转换这种JSON:

代码语言:javascript
复制
{  
   "component-0":{  
  "parent":"grid-item-0",
  "position":1
   },
   "component-1":{  
  "parent":"grid-item-0",
  "position":0
   },
   "component-2":{  
  "parent":"grid-item-1",
  "position":0
   } ...
}

分为(按“家长”分组并按“位置”排序):

代码语言:javascript
复制
{  
   "grid-item-0":[  
      {  
         "id":"component-1",
         "parent":"grid-item-1",
         "position":0
      },
      {  
         "id":"component-0",
         "parent":"grid-item-0",
         "position":1
      }
   ],
   "grid-item-1":[  
      {  
         "id":"component-2",
         "parent":"grid-item-1",
         "position":0
      }
   ] ...
}

请注意,保留原始密钥/标识符("component-0“等)很重要。在分组之后。我尝试了下划线groupBy方法,但是它用数字替换了我的id。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-11 16:25:33

代码语言:javascript
复制
var obj = {  
   "component-0":{  
  "parent":"grid-item-0",
  "position":1
   },
   "component-1":{  
  "parent":"grid-item-0",
  "position":0
   },
   "component-2":{  
  "parent":"grid-item-1",
  "position":0
   }
}

_.each(obj, (v, k) => v.id = k)
var grouped = _.groupBy(obj, 'parent');
var sorted = _.mapObject(grouped, v => _.sortBy(v,'position'))
console.log(sorted)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

票数 3
EN

Stack Overflow用户

发布于 2017-07-11 16:32:30

A香草JS解决方案:

首先,我们需要将原始对象转换为对象数组,将id添加到每个对象中:

代码语言:javascript
复制
var objects = Object.keys(original_object).
  reduce(function(arr, key) {
    arr.push(
      Object.assign({}, original_object[key], { id: key })
    );
    return arr;
  }, []);

这将为我们提供一个具有以下结构的数组:

然后按位置对objects进行排序:

代码语言:javascript
复制
var sorted_objects = objects.sort(function(a, b) {
  return a.position >= b.position ? 1 : -1;
});

最后,我们使用parent对对象进行分组。

代码语言:javascript
复制
var groups = sorted_objects.reduce(function(res, item) {
  res[item.parent] = res[item.parent] || [];
  res[item.parent].push(item);
  return res;
}, {});

最终结果:

最终代码:

代码语言:javascript
复制
var original_object = {  
  "component-0":{  
    "parent":"grid-item-0",
    "position":1
  },
  "component-1":{  
    "parent":"grid-item-0",
    "position":0
  },
  "component-2":{  
    "parent":"grid-item-1",
    "position":0
  }
}

var objects = Object.keys(original_object).
  reduce(function(arr, key) {
    arr.push(
      Object.assign({}, original_object[key], { id: key })
    );
    return arr;
  }, []);

var sorted_objects = objects.sort(function(a, b) {
  return a.position >= b.position ? 1 : -1;
});

var groups = sorted_objects.reduce(function(res, item) {
  res[item.parent] = res[item.parent] || [];
  res[item.parent].push(item);
  return res;
}, {});

console.log(groups);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45039724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档