2016-04-18 105 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, 但我看到[object object] [object object]。为什么filter返回[object Object]?

回答

3

过滤器需要返回true才能保留元素,否则返回false。

见下文:

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采用返回truefalse的函数,并创建一个只返回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'); 
相关问题