0

我无法从以下 json 获取输出

`[
 {theLevel:1,displayName: "John Doe1", index:1, parIndex:null },
 {theLevel:1,displayName: "John Doe2", index:2, parIndex:null },
 {theLevel:2,displayName: "John Doe3", index:3, parIndex:1 },
 {theLevel:2,displayName: "John Doe4", index:4, parIndex:1 },
 {theLevel:3,displayName: "John Doe5", index:5, parIndex:2 },
 {theLevel:3,displayName: "John Doe6", index:6, parIndex:2 },
]`

我的预期输出如下:

  [
      {text:"John Doe1", items:[{text:"John Doe3"},{text:"John Doe4"} ]},
      {text: "John Doe2, items:[{text:"John Doe5"},{text:"John Doe6"}]} ]
4

2 回答 2

1

这是一个解决方案,它对整个数据进行几次迭代以生成一棵树。其中一些迭代可以组合起来以提高性能,但在这里我将它们保持原样,以便更清楚发生了什么:

  1. 为每个人添加一个子属性

    _.each(data, function(person){
        _.extend(person, {children: []});
    });
    
  2. 以人的索引为键,人为值,创建数据的哈希

    var people = _.reduce(data, function(memo, person){
        memo[person.index] = person
        return memo;
    }, {} ); 
    

    people 对象将如下所示:

    {
       1: {theLevel:1,displayName: "John Doe1", index:1, parIndex:null },
       2: {theLevel:1,displayName: "John Doe2", index:2, parIndex:null },
       3: {theLevel:2,displayName: "John Doe3", index:3, parIndex:1 }
       etc.
    }
    
  3. 将每个孩子添加到其父母的孩子:

    _.each(data, function(person){
        if( !_.isNull(person.parIndex)) people[person.parIndex].children.push(person);
    });
    

    这会给你留下一棵树。

  4. 然后你可以把这棵树变成你喜欢的任何东西。此代码段将产生问题中的输出:

    function isParent (person) {
        return !_.isEmpty(person.children);
    }
    
    var parents = _.filter(people, isParent);
    
    var result = _.map(parents, function(person){
        return {
            text: person.displayName,
            items: _.map(person.children, function(child){
                return { text: child.displayName };
            })
        };
    
于 2015-02-14T22:20:24.727 回答
0

我做了以下似乎可以解决一个小问题。我得到了一些孩子的空项目数组。如果项目的数组为空,我宁愿什么都没有。

  1. 添加子元素和文本属性

    = _.each(results.data, function (entity) {
              _.extend(entity, { text: entity.displayName });
              _.extend(entity, { items: [] });
       });
    
  2. 像以前一样创建哈希

      = _.reduce(results.data, function (memo, entities) {
                        memo[entities.entIndex] = entities;
                        return memo;
                    }, {});
    
  3. 像以前一样将每个孩子添加到父母

    = _.each(results.data, function (entity) {
        if (!_.isNull(entity.parEntIndex)) ent[entity.parEntIndex].items.push(entity);
                    });
    

    4.

    function isParent (entity) {
                        return !_.isEmpty(entity.items) && entity.theLev == 1;
                    }
    
                    var test = _.filter(combine, isParent);
    
                    var result = _.map(test, function (currentObject) {
                        return _.pick(currentObject,'text','items');
                    });
    
于 2015-02-17T16:44:04.730 回答