Возвращать свойство Object вместо самого Object при использовании find ()

1

Я пытаюсь получить значение клиента, используя имя клиента, и по какой-то причине я возвращаю полный клиентский объект:

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}

Кто-нибудь знает почему? Спасибо!

  • 1
    Вы уверены, что знаете, как find работает? потому что вы, кажется, работаете в предположении, что это также map , а это не так. Его аргумент должен быть функцией предиката, которая возвращает истинное или ложное значение.
  • 1
    Спасибо @ Туффи! При этом я мог бы просто сделать: return (client.name === clientName) и получить тот же результат. Будет просто получить доступ к нему, как предложил @Sajeetharan
Показать ещё 2 комментария
Теги:
arrays

1 ответ

3
Лучший ответ

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() возвращает только первое найденное значение.

  • 0
    Вы читали документ? Find возвращает значение в массиве, если элемент проходит тест; в противном случае не определено.
  • 0
    Ваш код будет выдавать исключение, если элемент не был найден, как это может быть правильным ответом?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню