2017-05-01 5 views
1

Kann jemand erklären, warum harvesters[i] in diesem Fall undefined zurückgeben würde? Ich habe zuvor ähnlichen Code ohne Probleme verwendet. Dies ist für das Spiel Screeps.Iterieren durch eine gefilterte Liste gibt undefined zurück

var harvesters=_(Game.creeps).filter({ memory: { role: 'harvester' } }); 

    for(var i in harvesters) 
    { 
    //console.log(harvesters[i]); //this is the debug code I mention below 
    harvesters[i].memory.sourceid=0; 
    } 
} 

Nach einigen Tests (dank den Kommentaren) Ich fand, dass harvesters[i] nicht die Erntemaschine Objekt kehrte ich erwartet .... jeder harvester ist offenbar eine Instanz von

function wrapperValue() { 
     return baseWrapperValue(this.__wrapped__, this.__actions__); 
    } 

, wenn ich die Ausgabe versuchen es zu trösten. Warum ist das kein schleichendes Objekt?

+0

Ist das nicht '.filter()' soll mit einer Funktion aufgerufen werden ? – Pointy

+0

@Pointy Ja, ein Prädikat, das entscheidet, welche Funktionen beibehalten werden. Ich würde erwarten, dass dies einen Fehler zurückgibt. – Carcigenicate

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter?v=example – Carcigenicate

Antwort

2

Sie verwenden derzeit die verkettete Sequenzfunktion von lodash, um den unverpackten Wert zu extrahieren, den Sie anrufen müssen, um .value() aufzurufen.

Ihr Code wird schauen müssen etwas wie folgt aus:

const harvesters = _(Game.creeps).filter(
    { 
    memory: { 
     role: 'harvester' 
    } 
    } 
).value(); 

Alternativ Sie _.filter direkt verwenden können:

const harvesters = _.filter(Game.creeps, { 
    memory: { 
    role: 'harvester' 
    } 
});