Я не понимаю этот вопрос.
Я создаю функцию или вызываемый объект, который принимает целое число в качестве аргумента и возвращает «Чет» для четных чисел или «Нечет» для нечетных чисел. Функция также должна возвращать «Чет» или «Нечет» при доступе к значению по целочисленному индексу. Эта часть несколько сбивает с толку, поскольку мы не получаем доступ к массиву и не передаем массив через функцию. Моя функция заключается в следующем:
function evenOrOdd(n) {
//'Even' or 'Odd'
if (n==0){
return 'Even';
}else if (n%2==0){
return 'Even';
}
else{
return 'Odd';
}
}
Но тогда тесты такие:
const chai = require('chai');
const assert = chai.assert;
describe("Sample tests",() => {
it("[4] is even", () => {
assert.strictEqual(evenOrOdd[4], "Even"); //<--- How do I solv this? Test Fails
});
it("2 is even", () => {
assert.strictEqual(evenOrOdd(2), "Even"); //<--- Test Passd as expected
});
it("[11] is odd", () => {
assert.strictEqual(evenOrOdd[11], "Odd"); //<--- How do I solv this? Test Fails
});
it("7 is odd", () => {
assert.strictEqual(evenOrOdd(7), "Odd"); // Test Passd as expected
});
});
Что я здесь не понимаю и как это преодолеть?
@JaromandaX прав - измените строки на EvenOrOdd(4) и EvenOrOdd(11) - обратите внимание на скобки!
Я полностью понимаю, что это функция, но требуется, чтобы «Функция также должна возвращать «Четное» или «Нечетное» при доступе к значению по целочисленному индексу». Это часть требования. Это просто кажется невозможным и/или нелогичным.
Являются ли эти тесты чем-то, что вам предоставили и что вам нужно решить, или вы написали их сами, возможно, неправильно понимая требования?
Название вопроса может быть лучше. Если вы знаете, чего хотите, просто будьте прямолинейны и хорошо об этом спросите.
@Phil Это тестовые примеры, которые мне предоставили
Вы не можете вызвать функцию с квадратными скобками; если вы хотите это сделать (я не знаю почему, но я уверен, что этот вопрос предназначен для более широкой картины), вам нужно создать объект Proxy, который будет действовать как прокси для вашей функции evenOrOdd
.
Что-то в этом роде:
function evenOrOdd(n) {
if (n % 2 === 0) {
return 'Even';
} else {
return 'Odd';
}
}
const evenOrOddProxy = new Proxy(evenOrOdd, {
get: function(target, prop) {
if (!isNaN(prop)) {
return evenOrOdd(Number(prop));
}
return target[prop];
}
});
// Tests
console.info('Tests:')
console.info(evenOrOddProxy[4] === "Even") // <-- true
console.info(evenOrOddProxy(2) === "Even") // <-- true
console.info(evenOrOddProxy[11] === "Odd") // <-- true
console.info(evenOrOddProxy(7) === "Odd") // <-- true
Это позволяет как вызывать функции с круглыми скобками, так и получать доступ к свойствам с помощью квадратных скобок.
Этот прокси действительно помог. Я даже не знал, что так можно сделать. Я пытался это сделать в Google, но результата не нашел. Что это раздражало
EvenOrOdd — это функция… почему вы используете ее в своем коде разными (поочередными) способами? то есть как функция
evenOrOdd(2)
иevenOrOdd(7)
А также попытаться получить доступ к ее свойствам[4]
и[11]
, как если бы это не была функция