Проверка шансов и четов

Я не понимаю этот вопрос.

Я создаю функцию или вызываемый объект, который принимает целое число в качестве аргумента и возвращает «Чет» для четных чисел или «Нечет» для нечетных чисел. Функция также должна возвращать «Чет» или «Нечет» при доступе к значению по целочисленному индексу. Эта часть несколько сбивает с толку, поскольку мы не получаем доступ к массиву и не передаем массив через функцию. Моя функция заключается в следующем:

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
  });
  
});

Что я здесь не понимаю и как это преодолеть?

EvenOrOdd — это функция… почему вы используете ее в своем коде разными (поочередными) способами? то есть как функция evenOrOdd(2) и evenOrOdd(7) А также попытаться получить доступ к ее свойствам [4] и [11], как если бы это не была функция

Jaromanda X 19.06.2024 02:13

@JaromandaX прав - измените строки на EvenOrOdd(4) и EvenOrOdd(11) - обратите внимание на скобки!

bdcoder 19.06.2024 02:14

Я полностью понимаю, что это функция, но требуется, чтобы «Функция также должна возвращать «Четное» или «Нечетное» при доступе к значению по целочисленному индексу». Это часть требования. Это просто кажется невозможным и/или нелогичным.

DonDavid12 19.06.2024 02:15

Являются ли эти тесты чем-то, что вам предоставили и что вам нужно решить, или вы написали их сами, возможно, неправильно понимая требования?

Phil 19.06.2024 02:54

Название вопроса может быть лучше. Если вы знаете, чего хотите, просто будьте прямолинейны и хорошо об этом спросите.

Chukwujiobi Canon 19.06.2024 07:13

@Phil Это тестовые примеры, которые мне предоставили

DonDavid12 19.06.2024 21:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
123
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете вызвать функцию с квадратными скобками; если вы хотите это сделать (я не знаю почему, но я уверен, что этот вопрос предназначен для более широкой картины), вам нужно создать объект 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
  1. Оберните функцию в объект Proxy
  2. Используйте ловушку get в прокси-сервере для перехвата доступа к свойствам. Когда осуществляется доступ к числовому свойству (например, 4 или 11), оно вызывает функцию EvenOrOdd с этим номером.

Это позволяет как вызывать функции с круглыми скобками, так и получать доступ к свойствам с помощью квадратных скобок.

Этот прокси действительно помог. Я даже не знал, что так можно сделать. Я пытался это сделать в Google, но результата не нашел. Что это раздражало

DonDavid12 19.06.2024 21:55

Другие вопросы по теме