为什么过滤返回[object Object]?

时间:2016-04-18 22:19:41

标签: javascript arrays

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, 但我看到[对象对象] [对象对象]。

2 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

参考:MDN

答案 1 :(得分: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');