Я пытаюсь получить значение клиента, используя имя клиента, и по какой-то причине я возвращаю полный клиентский объект:
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
.
Функция будет работать точно так же, если вы только что это сделали:
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()
возвращает только первое найденное значение.
find
работает? потому что вы, кажется, работаете в предположении, что это такжеmap
, а это не так. Его аргумент должен быть функцией предиката, которая возвращает истинное или ложное значение.