2017-11-25 15 views
0

以下の簡単な例では、ゾンビ種のすべてのobjectsについて、生物の配列がフィルタリングされています。コールバック関数filterCreaturesは、Zombieという単語だけを検索できます。しかし、私はさまざまな怪物の名前を持つ変数を渡したいので、その関数をすべてのタイプのモンスターを検索するために再利用することができます。たとえば、次のようになります。return a.species === creatureType;どうすればいいですか? .filter()で余分な変数を渡す方法はありますか?本当にありがとう!.filter()で余分な引数を渡す方法はありますか?

'use strict'; 
 
\t 
 
var creatures = [], zombieCreatures = []; 
 
\t 
 
var filterCreatures; 
 
\t 
 
creatures = [ 
 
    {species: 'Zombie', hitPoints: 90}, 
 
    {species: 'Orc', hitPoints: 40}, 
 
    {species: 'Skeleton', hitPoints: 15}, 
 
    {species: 'Zombie', hitPoints: 85} 
 
]; 
 
\t 
 
filterCreatures = function(a) { 
 
    return a.species === 'Zombie'; 
 
} 
 
\t 
 
zombieCreatures = creatures.filter(filterCreatures); 
 

 
console.log(zombieCreatures);

+1

を受け入れる機能を作成します。あなたが探しています。 – Andrew

答えて

2

あなたはこのようなものを作成することができます。 filterプロパティを取得し、実際のフィルタ関数を返す関数を作成します。

'use strict'; 
 
\t 
 
var creatures = [], zombieCreatures = []; 
 
\t 
 
var filterFactory; 
 
\t 
 
creatures = [ 
 
    {species: 'Zombie', hitPoints: 90}, 
 
    {species: 'Orc', hitPoints: 40}, 
 
    {species: 'Skeleton', hitPoints: 15}, 
 
    {species: 'Zombie', hitPoints: 85} 
 
]; 
 
\t 
 
filterFactory = function(filter) { 
 
    return function(a) { 
 
    return a.species === filter; 
 
    }; 
 
}; 
 
\t 
 
zombieCreatures = creatures.filter(filterFactory('Zombie')); 
 

 
console.log(zombieCreatures); 
 

 
zombieCreatures = creatures.filter(filterFactory('Orc')); 
 

 
console.log(zombieCreatures);

1

あなたはそれが少しコードを変更することによって行うことができ、この

filterCreatures = function(creatureType, a) { 
    return a.species === creatureType; 
} 

zombieCreatures = creatures.filter(filterCreatures.bind(null, 'Zombie')); 
0

ようbind機能を使用することができます。

あなたは第二引数を受け付ける関数にあなたのフィルタをラップした場合、私はそれが何を達成するだろうと思う任意の配列およびフィルタリングされる要素

var creatures = [], 
 
    zombieCreatures = []; 
 

 
var filterCreatures; 
 

 
creatures = [{ 
 
    species: 'Zombie', 
 
    hitPoints: 90 
 
    }, 
 
    { 
 
    species: 'Orc', 
 
    hitPoints: 40 
 
    }, 
 
    { 
 
    species: 'Skeleton', 
 
    hitPoints: 15 
 
    }, 
 
    { 
 
    species: 'Zombie', 
 
    hitPoints: 85 
 
    } 
 
]; 
 

 
function filterCreatures(array, crt) { 
 
    return array.filter(function(a) { 
 
    return a.species === crt; 
 
    }) 
 
} 
 

 

 
console.log(filterCreatures(creatures, 'Skeleton'));

関連する問題