2016-08-18 24 views
0

繰り返しなしで配列内の各オブジェクトに対してメソッドを呼び出す洗練された方法がありますか?Javascript:繰り返しのない配列内の各オブジェクトの呼び出しメソッド

編集:質問の意図は、「可能な場合はループのために、または任意の反復なしなし」お願いしました申し訳ありませんが、混乱のため

var dogs = [new Dog("Max"), new Dog("Buddy"), new Dog("Charlie")]; 

for(var i=0; i<dogs.length; i++){ 
    dogs[i].sayName(); 
} 

function Dog(name){ 

    this.name = name; 

    this.sayName = function(){ 
     console.log(this.name); 
    } 

} 
+1

'dogs.forEach(dog => dog.sayName());'? – trincot

+2

この質問に答えるすべての人に:forEach()は繰り返しの一種ですか? – Barmar

+0

確かに、それは反復の一形態です。 – trincot

答えて

1

使用.forEach()

dogs.forEach(function(elem) { 
    console.log(elem.sayName()); 
} 

代わりにあなたがすることができます.map()を使用すると、新しい配列が返されます。

dogs.map(function(elem) { 
    return elem.name; 
} 

array.map()を使用している場合、返された配列を使用する予定がある場合、未定義の値の新しい配列で終わらないように何かを返す必要があります。

forEach()を使用すると、使用例に適しているようです。

@Barmarが指摘しているように、どちらの方法も配列内の各要素を繰り返し処理します。

0

forEachを使用できます。でも、オブジェクトの初期化は、mapと同様の方法で行うことができる:

var dogs = ['Max','Buddy','Charly'].map(name => new Dog(name)); 
 
dogs.forEach(dog => dog.sayName()); 
 

 
function Dog(name){ 
 
    this.name = name; 
 
    this.sayName = function(){ 
 
     console.log(this.name); 
 
    } 
 
}

1

ませ

各配列項目に何かをやっていないあなたは、配列を反復処理を意味します。

したがって、配列を反復することなく実行することはできません。

0

あなたはmapを使用することができます。現在の値、現在のインデックス、および配列:mapため

dogs.map(function(thisDog) { thisDog.sayName(); }) 

コールバックは3つの引数を取ります。しかし、あなたの場合、現在の値だけが必要なので、他の2つの引数を指定する必要はありません。

+0

* map *はコールバック関数の戻り値から新しい配列を作成しますが、これは不要なので少し無駄です。 * forEach *はそれよりも優れたオプションです。私は、有権者が投票を説明するのに時間を費やすことを望む。 – RobG

関連する問題