javascript - 使用 lodash 创建父子关系

标签 javascript ecmascript-6 lodash

根据索引值组合父级和子级 JSON 数组,并向其中添加另一个找到的属性。

数据:比较字段: ParentJSON - 索引 childJSON -parent_index

输出: - 家长 - 及其 child - 家长 - 及其子元素

parentJSON:
[{ index:1, name: 'a'}, {index:2, name: 'b'}, {index:3, name: 'c'}, {index:4, name: 'd'}]

childJSON:
[
  { index:1, name: 'aa', parent_index:1}, 
  {index:2, name: 'ab', parent_index:1}, 
  {index:3, name: 'ba', parent_index: 2}, 
  {index:4, name: 'bb', parent_index: 2}, 
  {index:5, name: 'ca', parent_index: 3}, 
  {index:6, name: 'ad', parent_index: 1}
]

output:
[
  { index:1, name: 'a'},
  { index:1, name: 'aa', parent_index:1, found: true}, 
  { index:2, name: 'ab', parent_index:1, found: true},
  { index:6, name: 'ad', parent_index:1, found: true},
  { index:2, name: 'b'},
  { index:3, name: 'ba', parent_index:2, found: true}, 
  { index:4, name: 'bb', parent_index:2, found: true},
  { index:3, name: 'c'},
  { index:5, name: 'ca', parent_index:3, found: true},
  { index:4, name: 'd'},
]

Plunker Link

最佳答案

由于您正在使用 lodash ,将使我的解决方案全部包含在 lodash 中。

解决这个问题的步骤是:

  1. 是映射childJSON,检查其parent的索引是否存在

  2. 将两个 json 数组合并为一个。

  3. 名称升序对它们进行排序。

将其写入代码将是:

var childJSON = [
  { index:1, name: 'aa', parent_index:1}, 
  {index:2, name: 'ab', parent_index:1}, 
  {index:3, name: 'ba', parent_index: 2}, 
  {index:4, name: 'bb', parent_index: 2}, 
  {index:5, name: 'ca', parent_index: 3}, 
  {index:6, name: 'ad', parent_index: 1}
];

var parentJSON = [
   { index:1, name: 'a'},
   {index:2, name: 'b'}, 
   {index:3, name: 'c'}, 
   {index:4, name: 'd'}
   ];


childJSON = _.map(childJSON, function(child) {
    child.found = !!_.find(parentJSON, {index: child.parent_index});
    return child;
});

var newArray = _.concat(childJSON, parentJSON);
newArray = _.sortBy(newArray, ['name']);

console.log(newArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>

关于javascript - 使用 lodash 创建父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519730/

相关文章:

javascript - JS |如何以弧度为单位旋转?

javascript - 我对过滤器和 map 功能感到困惑。我正在给它们嵌套。请为我指明正确的方向

javascript - Angular 的某些部分是否会被逐页销毁并重新创建?

javascript - 如何禁用光滑灯箱中的无限循环?

javascript - 否定分配给新变量的解构值

node.js - 使用 express 和 es6 渲染 react 和 jsx 服务器端

javascript - 从 objectId 数组中移除一个 ObjectId

javascript - 将字符串和数字中的字体大小分开;与洛达什

javascript - 当我已经安装了 lodash 时,我还需要 n_ 吗?

javascript - 从数据量较大的textarea中删除某些文本