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()
。您读过文档了吗?如果某个元素通过测试,则在数组中查找并返回一个值;否则,未定义。若未找到元素,代码将抛出异常,如何才能正确回答?