迭代 JavaScript 集合并添加排序顺序

Iterating a javascript collection and adding a sort order

本文关键字:排序 顺序 添加 合并 JavaScript 集合 迭代      更新时间:2023-09-26

我在javascript中有一棵树,它有多个根元素和嵌套的子元素。

下面是对象:

[{
  _id: '546d30905d7edd1d5169181d',
  name: 'first'
  children: []
}, {
  _id: '546d30905d7edd1d2169181d',
  name: 'second'
  children: []
}, {
  _id: '446d30905d7edd1d5169181d',
  name: 'third',
  children: [{
    _id: '446d30905d7e2d1d5169181d',
    name: '3child',
    children: []
  }, {
    _id: '446d30915d7e2d1d5169181d',
    name: '3child2',
    children: [{
      _id: '546d30905d7edd1d2569181d',
      name: 'second2',
      children: []
    }]
  }]
}, {
  _id: '546d30995d7edd1d5169181d',
  name: 'fourth',
  children: []
}]

这是一个截断的文档,使用物化路径存储在MongoDB中。 问题是我需要添加"排序"功能,以便可以对同一根中的节点进行排序。

我想迭代这棵树并应用sort_value,例如node['sort_value'] = 0等。

每个级别都有自己的排序顺序,从 0 开始。

我可以简单地递归迭代树:

function iterate(items) {
  _.each(items, function(page, key) {
    if (items.children.length > 0) {
      iterate(items.children);
    }
  });
}

但是,我不知道如何跟踪排序顺序并更新对象的顺序以包含sort_value字段。

任何帮助将不胜感激!谢谢

我这样做是为了使用数组键进行排序并将其与对象属性"同步"(因为我需要将其保存到数据库并在之后恢复),并且它用作魅力:)

所以像这样的东西,伪:

var unsorted = [
0:{"sort_key": "0", "data":"dataaa 0"},
1:{"sort_key": "1", "data":"dataaa 1"},
...
n:{"sort_key": "n", "data":"dataaa n"}
];

function_sort(unsorted){ 
    ...
    return sorted = [
      0:{"sort_key": "n", "data":"dataaa y"},
      1:{"sort_key": "44", "data":"dataaa x"},
      ...
      n:{"sort_key": "0", "data":"dataaa z"}
    ];
}

save = function_save(sorted){
...update sort_key as array key...
return for_saving;
}