Есть ли способ условно сократить функцию-член объекта в JavaScript?
Не совсем. У вас есть набор методов в цепочке, и вы не можете условно вставить что-то в цепочку.
Мне кажется, что самый ясный вариант такой:
let x = db.collection(collection).find(params);
if (someCondition) x = await x.toArray();
Существуют и другие странные вещи, такие как как установка метода no-op для объекта заблаговременно, а затем выполнение метода из переменной, которая иногда будет содержать «toArray», а иногда - «n oop».
let x = await db.collection(collection).find(params)[someCondition ? "toArray" : "noop"]();
Но я не думаю, что я когда-либо сам напишу код таким образом, потому что я не вижу его очень ясным.
К вашему сведению, ваш конкретный пример немного странный, потому что .find()
возвращает объект курсора и .toArray()
возвращает обещание, которое разрешается в массив. Итак, вы также просите в конечном итоге использовать разные типы данных в одну сторону по сравнению с другой. Кажется, что этот другой тип результата в любом случае должен будет go искать другой путь к коду, так что условная ветвь - это нечто большее, чем просто этот один шаг. Это означает, что на самом деле следует взглянуть на общую картину проблемы в целом больше, чем просто этот шаг или приказ найти лучшее решение.