2016-04-18 5 views
1
var persons = [ 
    {name : "jak" , age:20}, 
    {name : "hasan" , age: 15}, 
    {name : "reza" , age:18} 
]; 

function adult(el,index,arr){ 
    if (el.age >= 18) 
     return el.name; 
    } 

    document.getElementById("x").innerHTML = persons.filter(adult); 
} 

私はjakとreza、 を期待していましたが、[オブジェクトオブジェクト] [オブジェクトオブジェクト]が表示されます。なぜフィルタは[オブジェクトオブジェクト]を返しますか?

答えて

3

要素を保持するには、フィルタをtrueに戻す必要があります。

は、以下を参照してください。

var persons = [{ 
 
    name: "jak", 
 
    age: 20 
 
}, { 
 
    name: "hasan", 
 
    age: 15 
 
}, { 
 
    name: "reza", 
 
    age: 18 
 
}]; 
 

 
function adult(el, index, arr) { 
 
    if (el.age >= 18) 
 
    return true; 
 
} 
 

 
document.getElementById("x").innerHTML = persons.filter(adult).map(function(person) { 
 
    return person.name; 
 
});
<div id='x'></div>

参考:あなたは文字列としてオブジェクトの配列を表示しようとしているので、MDN

+0

良い点。それは実際に彼のトラブルを引き起こしているように思われた彼の最後のラインでした、私は正しい結果を出力するために変更しました。 – timolawl

2

あなたは[object Object], [object Object]を見ています。これは、filterが戻り値に基づいて文字列を作成すると考えるように思われるためです。それはどのようにfilter作品ではないです。 filterは、trueまたはfalseを返し、trueを返した結果のみを持つ新しい配列を作成する関数をとります。

var adults = persons.filter(function(person) { 
    return person.age >= 18; 
}); 

アレイの特定の要素を別のものにマップする場合は、mapを使用できます。

var adultNames = adults.map(function(person) { 
    return person.name; 
}); 

最後に、単一の文字列に配列を変換するために、あなたはjoinを使用することができます。

document.getElementById("x").innerHTML = adultNames.join('and'); 
関連する問題