对象中有n个父级和子级
var obj={
name:'one',
child:{
name:'two',
child:{
name:'three',
child..
}
}
}
foo(obj)
编写一个函数以获得['one', 'two, 'three', ...]
答案 0 :(得分:1)
你应该使用递归函数
var result = [];
function searchChildren(parent){
if(parent.child){
result.push(parent.name);
searchChildren(parent.child);
}
}
searchChildren(obj);
答案 1 :(得分:1)
这是一种方法,基本上你返回并再次调用函数。有点像一个循环。
var obj={
name:'one',
child:{
name:'two',
child:{
name:'three'
}
}
}
function foo(obj, arr) {
if (!obj) return arr;
arr.push(obj.name);
return foo(obj.child, arr);
}
var results = foo(obj,[]);
答案 2 :(得分:1)
使用while
循环遍历对象的每个级别,直到找不到object.child
:
function foo(object) {
var result = []
while (object) {
result.push(object.name)
object = object.child
}
return result
}
var object = {
name: 'one',
child: {
name: 'two',
child: {
name: 'three'
}
}
}
console.log(foo(object)) //=> ['one', 'two', 'three']

答案 3 :(得分:1)
您可以使用生成器并为对象和数字添加咖喱。
function setObject(object) {
return function* (n) {
while (n--) {
yield object.name;
object = object.child;
}
}
}
var obj = { name: 'one', child: { name: 'two', child: { name: 'three', child: { name: 'four', child: { name: 'five' } } } } },
getNumbers = setObject(obj);
console.log([...getNumbers(4)]);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 4 :(得分:1)
@ stackoverfloweth的回答对我来说似乎是最好的,因为它非常简单有效。但我认为它可以更简单,而且我还包括最后一级:
var obj={
name:'one',
child:{
name:'two',
child:{
name:'three'
}
}
}
var res = [];
function search(obj){
res.push(obj.name);
!obj.child || search(obj.child);
}
search(obj);
console.log(res);
答案 5 :(得分:0)
你可以试试这样的事情
funtion f1(array, obj){
if(obj){
if(obj.name){
array.push(obj.name);
}
if(obj.child){
return f1(array, obj.child);
}
}
return array;
}
funtion f2(array, obj){
while(obj){
if(obj.name){
array.push(obj.name);
}
obj = obj.child;
}
return array;
}
function foo(obj){
var array = [];
//recursive version
return f1(array, obj);
// non recursive version
//return f2(array, obj);
}
foo(obj);
答案 6 :(得分:0)
使用以下递归函数{% for tst in studentexamitems %}
{% if qt == tst.qitem_id and st == tst.student_id %}
{{tst.qscore}}
{% else %}
<a href="{% url 'newTableEntry' qt.id st.id %}">
<button type="button" class="btn btn-success btn-xs">
<span class="glyphicon glyphicon-plus"></span> Grade
</button>
</a>
{% endif %}
{% endfor %}
:
getAllNames()
答案 7 :(得分:0)
许多答案检查未定义的子节点作为终止递归的函数的参数。这意味着可以避免额外的呼叫
function doit (obj, arr = []){
arr.push(obj.name);
return obj.child ? doit(obj.child, arr) : arr;
}
答案 8 :(得分:0)
此代码将输出这样的数组
["one", "two", "three"]
var obj = {
name: 'one',
child: {
name: 'two',
child: {
name: 'three'
}
}
}
var str = parser(obj);
var arr = str.substring(0, str.length - 1).split(";");
console.log(arr); // Output ["one", "two", "three"]
function parser(obj) {
var text = obj.name + ";";
if (obj.child) text += parser(obj.child);
return text;
}
&#13;
答案 9 :(得分:0)
试试这个
var string = foo(obj);
var array = str.substring(0, str.length - 1).split(",");
console.log(array);
function foo(obj) {
var total= obj.name + ",";
if (obj.child !=null) total= total+ foo(obj.child);
return total;
}