2016-07-19 16 views
1
// Build structures 
var structs = curRoom.find(FIND_CONSTRUCTION_SITES, { 
    filter: (structure) => { 
     return 
      _.filter(Memory.jobs.worker.normal, 
       (job) => { 
        return job.id == structure.id; 
       }).length == 0 // Test if this structure is already in the queue 
      && _.filter(Game.creeps, 
       (creep) => { 
        return creep.memory.curJob != undefined && creep.memory.curJob.id == structure.id; 
       }).length == 0; // Test if a creep is already working on this structure 
    } 
}); 

上記のコードは、0の建設サイト(テストに合格する40のうち)を返しますが、すべての建設サイトは(外側の)フィルタを通過します。私はまた、(.length == 0で)内部のフィルターをテストしているネストされたフィルタが機能しない

console.log(<filter1>); // true 

console.log(<filter2>); // true 

console.log(<filter1>, <filter2>) // true true 

console.log(<filter1> && <filter2> 

は、私が行方不明です何かあるのか、私は完全に間違って何かを行っていますか?

+0

奇妙なので、時間を節約します。私にはコードはしっかりしています。しかし、ええ、一般的に外側のフィルタの前に内側のフィルタを移動する方が良い考えです。 –

答えて

0

この問題は、外側のフィルタの前(外側)に内側のフィルタを実行することで解決しました。これはまた、ほとんど同じであるフィルタが複数回実行される必要がないので(修復などの他のアクションのために)

関連する問題