Javascript函数可以在console.log中输入值但不返回它

时间:2017-07-15 16:32:57

标签: javascript

我有一个对象数组:

let array = [
  {
    id: 0,
    name: "Name0"
  },
  {
    id: 1,
    name: "Name1"
  }
]

和遍历数组的函数,搜索具有指定id属性的对象,并返回对象名称属性:

function getName1(id) {
  array.map((object) => {
    if(object["id"] === id)
      return object["name"]
  })
}

然而这段代码

console.log(getName1(0)) // undefined

返回undefined

如果我只是在console.log中找到函数内部对象的名称

function getName2(id) {
  array.map((object) => {
    if(object["id"] === id)
      console.log(object["name"])
  })
}

它完美无缺:

getName2(0) // "Name1"

我基本上只想要

getName1(0)

返回

Name0

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

问题是,您的return语句是从map回调而非getName1返回的。

你根本不应该使用map,它的工作是根据回调的返回值创建一个新数组。

相反,使用Array#find,其作用是找到给定回调函数返回truthy值的数组中的第一个条目,然后返回找到的条目的name属性(如果有):

function getName1(id) {
    const entry = array.find(object => object.id === id);
    return entry && entry.name;
}

或者在ES5及更早版本中(因为你使用了箭头功能,我使用了ES2015 +):

function getName1(id) {
    var entry = array.find(function(object) { return object.id === id; });
    return entry && entry.name;
}

entry && entry.name部分表示"如果entry真实,请返回entry.name;否则,返回entry(假值)本身。"在这种情况下,如果找不到该条目,它将返回null(因为未找到条目时Array#find返回的内容)或{{1找到的条目。