我有一个对象数组:
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
我怎样才能做到这一点?
答案 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找到的条目。