2015-08-31 3 views
0

У меня есть вложенный объектдлинная строка в вложенном объекте

[ 
    { 
     "name": "Americas", 
     "categories": [ 
      "No Product Assigned", 
      "Accessories", 
      "AP - Apparel", 
      "FW - Footwear" 
     ] 
    }, 
    { 
     "name": "Europe and Middle east", 
     "categories": [ 
      "No Product Assigned", 
      "Accessories", 
      "AP - Apparel", 
      "FW - Footwear" 
     ] 
    } 
] 

где категории могут содержать дополнительные вложения по имени и категории,

до сих пор я ве удалось получить глубину и список все элементы в объекте с использованием

_depthOfCategory = function(object) { 
      var levelObj = { 
       level : 0, 
       name : [] 
      }; 
      var key; 

      for (key in object) { 
       if (object[key].name) { 
        levelObj.name.push(object[key].name); 
       } else if (typeof (object[key]) === "string") { 
        levelObj.name.push(object[key]); 
       } 

       if (!object.hasOwnProperty(key)) { 
        continue; 
       } 

       if (typeof object[key] === 'object') { 
        var child = this._depthOfCategory(object[key]); 
        var depth = child.level + 1; 
        levelObj.level = Math.max(depth, levelObj.level); 
        levelObj.name = child.name.concat(levelObj.name); 

       } 
      } 
      return levelObj; 
     }; 

где levelObj.length = общая глубина; levelObj.name = объединенный список всех элементов.

Любые идеи о том, как ниже результат может быть достигнут

result[0] = "Europe and Middle east" 
result [1] = " No Product Assigned" 

которые являются длинные строки в соответствующих глубинах.

ответ

1

Что-то вроде этого сделало бы трюк, я думаю.

function getLongest(list, result, level) { 
    result = result || {}; 
    level = level || 0; 
    result[level] = result[level] || ''; 

    list.forEach(function(obj) { 
    var name = typeof obj === 'string' ? obj : obj.name ? obj.name : null; 
    if (name && name.length > result[level].length) result[level] = name; 
    if (obj.categories) getLongest(obj.categories, result, level + 1); 
    }); 


    return result; 
} 

Вы можете назвать это нравится:

getLongest(object);