2016-03-23 10 views
-1

Ich habe ein Objekt, das wie folgt aussieht (es unendlich sein kann):Erstellen Sie ein benutzerdefiniertes Objekt Aufruf

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

Und ein Array, das mir zeigt, wo ich in diesem Objekt treffen werden sollte; wenn ich für exemple will in der zweiten Liste der dritten Liste gehen, wenn werde dies hat:

target = [3, 2]; 

Ich kann einen benutzerdefinierten Aufruf erstellen das richtige Objekt in ‚Liste‘, um mein ‚Ziel‘ Array.

Vielen Dank für Ihre Hilfe!

EDIT:

Ich habe gerade:

var array = list; 

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

Und es funktionierte.

Dank

+1

Was * * spezifisches Problem konfrontiert sind Sie? –

+0

Ich triinge, um die Liste ein neues Element je nach der Tiefe davon zu schieben. Ich möchte folgendes tun: customTarget.push (newItem) Wenn customTarget mit einer Schleife erstellt wird: Liste [3] .list [2] .list.push (newItem); –

Antwort

0

Ich denke, du so etwas bist:

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); 

Sie können es mit einem reduzieren, wenn Sie wollen, aber ich werde es mit einem einfachen halten for-Schleife .

Bitte beachten Sie, dass ich ein OBJECT mit einer Listeneigenschaft übergebe und ein Objekt mit einer Listeneigenschaft zurückbekomme. Erstellen einer Funktion, die ein Array erhält und ein Objekt zurückgibt, ist eine einfache Bearbeitung, aber ich fühlte, dass es nicht in der Absicht war.

Viel Glück!

0

Da das Objekt tief verschachtelt werden, können Sie auch Rekursion wie unten versuchen:

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({}); 
Verwandte Themen