только с одним собственным вызовом функции
Акцент мой. Если это точное требование, вы можете попытаться обойти правила. Ответ от kshetline уже показывает, что вы можете использовать eval
, но если бы я давал интервью, я бы очень хотел, чтобы люди не использовали eval
. Поэтому для меня требование вызова функции one можно выполнить с помощью replace
:
function someFunc(arg) {
return +arg.replace(/_/g, "")
}
console.log(someFunc('1_22_333'))
Итак, это один вызов String#replace
и унарный плюс operator .
Однако это несколько эксплуатирует технические детали:
- Вопрос никогда не определяет , а не для использования операторов, он просто говорит о вызове одной функции. Поскольку требование явно не запрещает нефункциональные операции, оператор не находится вне правил.
.replace
также является методом не функцией, так как это свойствоСтроковый объект. Тем не менее, это немного больше философского различия - вы, безусловно, можете отметить, что у JS очень слабое различие между методами и функциями. Все методы - это просто функции , которые присоединены к объекту и (обычно, но не всегда) используют контекст this
.
Если эта вторая точка оспаривается, то не стесняйтесьизменить правила еще сложнее - если метод его не обрезает, то метод не должен учитываться как часть требования для одного вызова функции . Точно так же оператор +
не считается. Таким образом, в этом случае этот код должен соответствовать требованию:
function someFunc(arg) {
var method = String.prototype.replace;
var fn = method.bind(arg);
return +fn(/_/g, "");
}
console.log(someFunc('1_22_333'))
Я разбил его для упрощения рассуждений. Вы также можете просто написать
+String.prototype.replace.bind(arg)(/_/g, "")
String.prototype.replace
- это не вызов функции, это получение значения объекта. В данном случае это прототип String
, но это не имеет значения. Function#bind
- это вызов метода . Если это не считается как функция, то это разрешено. Это вернет новую функцию , которую вы можете выполнить. Если кто-то жаловался, что технически .replace
является методом, то технически , результат возврата .bind
определенно не является.
Это творческий подходинтерпретация по многим пунктам, но я все еще нахожу это лучшим ответом , чем eval
.