2016-03-23 19 views
-1

aramayı kurmak:özel nesne Şöyle bir nesne var (sonsuz olabilir)

list: [ 
{ 
    list: [ 
    { 
     list: [ 
     {...} 
     ] 
    } 
    ] 
}, 
{ 
    list: [ 
    {...} 
    ] 
}, 
{ 
    list: [ 
    {...} 
    ] 
} 
]; 

Ve bu nesnede isabet olması gereken yerde beni belirten bir dizi;

target = [3, 2]; 

elimden benim 'hedef' dizisi kullanarak 'listesinde' doğru nesneyi almak için bir özel arama oluşturmak için: exemple için bu olacak eğer 3 listenin 2 listesinde gitmek istiyorum.

Yardımlarınız için teşekkür ederiz!

DÜZENLEME:

Sadece yaptı:

var array = list; 

for (var i = 0; i < target.length; i++) { 
    array = array[target[i]].list; 
} 

Ve işe yaradı.

Teşekkür

+1

* Belirli * Sorun Ne karşılaşıyorsunuz? –

+0

Listenin derinliğine bağlı olarak listede yeni bir öğe bastırmaya çalışıyorum. Yapmak istediklerim: customTarget.push (newItem); customTarget döngü kullanılarak oluşturuluyor: liste [3] .list [2] .list.push (newItem); –

cevap

0

Ben böyle bir şey arıyoruz düşünüyorum:

var obj = { 
    list:[ 
    { 
    list: [ 
     { 
     list: [] 
     } 
    ] 
    }, 
    { 
    list: [ 
     { 
     list: [] 
     } 
    ] 
    }, 
    { 
    list: [ 
     { 
     list: [] 
     }, 
     { 
     list: [] 
     }, 
     { 
     list: [] 
     }, 
     { 
     list: [ 
      { 
      list: [], 
      a: 5 
      } 
     ] 
     } 
    ] 
    } 
    ] 
}; 


function getListObject(theList, indexes) { 
    var i; 
    for(i = 0; i < indexes.length; i++) { 
    theList = (theList && theList.list) ? theList.list[indexes[i]] : null; 
    } 
    return theList; 
} 

alert(getListObject(obj, [2, 3, 0]).a); 

İsterseniz bir, azaltmak ile yapabilirsiniz, ama döngü için basit tutacağız .

Lütfen bir liste özelliği ile bir nesne içinde geçiriyorum ve bir liste özelliği ile bir nesne alıyorum. Bir dizi alır ve bir nesne geri veren bir işlev oluşturma basit bir düzenleme, ancak niyetinde olmadığını hissettim.

İyi şanslar! Nesne derinden iç içe gibi

0

, ayrıca aşağıdaki gibi Özyinelemeyi deneyebilirsiniz:

function getList(list, target){       
    var index = target[0] - 1;   

    if (target.length === 1) return list[index];    

    return getList(list[index].list, target.slice(1)); 
} 

// invoke : var sublist = getList(obj.list, [3, 1]); 
// sublist.push({});