首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS;嵌套对象(父对象/子对象)到平面数组

问JS;嵌套对象(父对象/子对象)到平面数组
EN

Stack Overflow用户
提问于 2014-06-02 16:46:04
回答 4查看 2.3K关注 0票数 2

我正在使用lodash (虽然解决方案不必这样做),我想转换以下结构:

代码语言:javascript
复制
{ prop1: 'root',
  prop2: 'someVal',
  children: [
    { prop1: 'first Child',
      prop2: 'some other val',
      children: [
        { prop1: 'last child'
          prop2: 'another value'
          children: []
        }
      ]
    }
  ]
}

到平面阵列:

代码语言:javascript
复制
[ { prop1: 'root', prop2: 'someVal' }, 
  {prop1: 'firstChild', prop2: 'some Other Val'}, 
  {prop1: 'last child', prop2: 'another value'}
]

深度可能有所不同,最后一个子数组总是将[]分配给它的children属性;请注意,在这种情况下,子数组中总是有一个项。

应该相当直截了当,但似乎我只是因为某些原因而不能把手指放在上面

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-03 13:58:58

用这个片段解决(在CoffeeScript中)

代码语言:javascript
复制
flatten = (node) ->
        row = node
        _.each node.children or [], (el) ->
            flatten el
        ancestors.push row
票数 1
EN

Stack Overflow用户

发布于 2017-08-11 13:59:23

这是用于使用匿名目标来压缩成(例如,flattened)

代码语言:javascript
复制
flatten = (collection, flattened = [])->
  _.each collection, (obj)->
    flattened.push obj
    flatten obj.children, flattened
  flattened
票数 1
EN

Stack Overflow用户

发布于 2015-11-12 20:42:36

使用纯JS:- http://jsbin.com/bazilurolu/edit?js,console的解决方案

代码语言:javascript
复制
var flatArray = function(input){
    var result = [];
    (function(obj){
        var arr = [], newObj = {};
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if(key !== "children"){
                    newObj[key] = obj[key];
                }
                else{
                    arr = obj[key];
                }
            }
        }
        result.push(newObj);
        if(arr.length){
            arguments.callee(arr[0]);
        }
    })(input);
    return result;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23999471

复制
相关文章

相似问题

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