-1

我有一个动态创建的对象。这是一个简单的例子:

global.data {
    children: [
        0: {
            children:  [
                0: {
                   children: value 
                }
            ]
        }
    ]

}

我想要做的是检查对象(global.data)是否具有'children'的属性,从中获取属性,然后通过循环将该对象('children')发回以查看它是否具有'的属性它自己的孩子。我希望它继续前进,直到没有更多的“孩子”可以穿越。

4

2 回答 2

6

运行一个while循环,直到它达到最深。jsfiddle

global = {};
global.data = {
    children: [
         {
            children:  [
                 {
                   children: "value"
                }
            ]
        }
    ]
}

var obj = global.data;

while( typeof obj == 'object' && typeof obj.children == 'object'){
  obj = obj.children[0];
}
obj = obj.children ? obj.children  : obj;​
 // at this point obj is either undefined or has no children property. 
于 2012-10-23T19:47:40.780 回答
0

考虑使用对象扫描。一旦你把头绕在它周围,它对数据处理就很强大。下面的示例将仅返回第一个值,但可以通过更改轻松更改为返回所有匹配项abort

// const objectScan = require('object-scan');

const input = { children: [{ children: [{ children: 'value' }] }] };

const find = (data) => objectScan(['**(^children$)'], {
  abort: true,
  rtn: 'value',
  useArraySelector: false,
  filterFn: ({ value }) => typeof value === 'string'
})(data);

console.log(find(input));
// => value
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.8.0"></script>

免责声明:我是对象扫描的作者

于 2020-10-24T22:03:46.267 回答