Javascript 使用find()时返回对象的属性,而不是对象本身
我试图使用客户机的名称获取客户机的值,出于某种原因,我获取完整的客户机对象:Javascript 使用find()时返回对象的属性,而不是对象本身,javascript,arrays,Javascript,Arrays,我试图使用客户机的名称获取客户机的值,出于某种原因,我获取完整的客户机对象: function createBank(clients) { return { clients: clients, safeBoxValue: function() { return this.clients.reduce(function(sum, client) { return sum + client.value;
function createBank(clients) {
return {
clients: clients,
safeBoxValue: function() {
return this.clients.reduce(function(sum, client) {
return sum + client.value;
}, 0);
},
getclientValue: function(clientName) {
return this.clients.find(function(client) {
if (client.name === clientName) {
return client.value;
}
});
}
}
}
var clients = [
{name: "John", value: 349},
{name: "Jane", value: 9241},
{name: "Jill", value: 12734},
]
var bank = createBank(clients);
bank.safeBoxValue(); // 22324
bank.getclientValue('Jill'); // {"name":"Jill","value":12734}
有人知道为什么吗?谢谢 array.find()
通过传入一个返回布尔值的函数来确定对象是否是您要查找的对象。尽管有代码,您的函数仍在工作,因为您在返回client.value
时返回的值是“truthy”
如果您刚刚执行了以下操作,该函数的工作原理将完全相同:
getclientValue: function(clientName) {
return this.clients.find(function(client) {
return client.name === clientName
});
}
它将遍历数组,直到您返回true,然后将元素传递给您,在本例中是您刚刚找到的整个对象。要仅获取该值,需要单独返回:
getclientValue: function(clientName) {
var found = this.clients.find(function(client) {
return client.name === clientName
});
return found && found.value
}
请记住
find()
只返回找到的第一个值。您确定知道如何工作吗?因为您似乎是在假设它也是一个映射的情况下工作的,而事实并非如此。它的参数应该是返回truthy或falsy值的谓词函数。谢谢@Touffy!也就是说,我只需要返回(client.name===clientName)就可以得到相同的结果。将按照@Sajeetharan的建议访问它。如果调用方法getclientValue()
,则可能会重复该方法,它将返回该值。它不应该期望调用者调用返回的项目的.value()
。您读过文档了吗?如果某个元素通过测试,则在数组中查找并返回一个值;否则,未定义。若未找到元素,代码将抛出异常,如何才能正确回答?