3000
в запросе на https://example.com:3000/server/
, но в коде сервера, вы слушаете порт 3000
на хосте example.com/server
.host
в коде сервера на example.com
и удалить /server
из пути запроса:const host = 'example.com';
const port = 3000;
// ...
app.post('/server', (req, res) => { // изменить путь на /server
// ...
});
const response = await fetch(
'https://example.com/server/', // изменить путь на /server
{
method: 'POST',
// mode: 'no-cors', // удалить эту строку
headers: {
'Content-Type': 'text/plain',
},
body: mail,
}
);
'James',
так как James
- единственный подозреваемый, который видел всех убитых людей в день убийства.getKiller
мы используем метод Object.entries()
для перебора объекта suspectInfo
и получения доступа к ключам и значениям.every()
. Если это так, то мы сохраняем имя этого подозреваемого в переменной killerName
.killerName
.function getKiller(suspectInfo, deadPeople) {
// Создаем объект для хранения информации о том, кого видели подозреваемые
let seenBySuspects = {};
// Заполняем объект seenBySuspects информацией о том, кого видели подозреваемые
for (let suspect in suspectInfo) {
for (let seenPerson of suspectInfo[suspect]) {
if (!seenBySuspects[seenPerson]) {
seenBySuspects[seenPerson] = [];
}
seenBySuspects[seenPerson].push(suspect);
}
}
// Ищем преступника
for (let suspect in suspectInfo) {
let allDeadPeopleSeen = true;
for (let deadPerson of deadPeople) {
if (!seenBySuspects[deadPerson].includes(suspect)) {
allDeadPeopleSeen = false;
break;
}
}
if (allDeadPeopleSeen) {
return suspect;
}
}
// Если преступник не найден, возвращаем null
return null;
}
seenBySuspects
, который будет хранить информацию о том, кого видели подозреваемые.suspectInfo
.Если ответ помог, не забудьте отметить его как решение вашего вопроса.
eslint
.eslint
конфликтующей с версией eslint
требуемой другой зависимостью вашего проекта.npm i -g npm
eslint
до версии, которая удовлетворяет требованиям всех зависимостей.npm install -D eslint@7.28.0
node_modules
и файл package-lock.json
, затем переустановите зависимости с флагом --force
:npm install --force
--legacy-peer-deps
при установке зависимостей:npm install --legacy-peer-deps
vue-cli
при старте новых проектов на Vue, тк это инструмент который в будущем не будет поддерживаться (уже сейчас мало поддерживается).npm create vue@3
npm create vite@latest my-vue-app -- --template vue
window.onload = function() {
$( document ).ready(function() {
var Content = '#rec555753100'; //id Zero block
var Wrapper = '#rec555985001'; //id блока popup окна BF503
$(Wrapper + " .t-popup__container").html($(Content)).parent(".t-popup");
$(Wrapper).addClass('ZeroInPopUp');
$(Wrapper + " .t-slds__main").css({"width": "100%", "height": "auto"}); // Установите ширину и высоту для галереи-слайдера
});
};
images
была скопирована в dist
, вы должны убедиться, что у вас есть изображения в папке src/assets/images
и что они соответствуют указанным расширениям в path.src.images
.src/assets/images
и будут иметь любое из этих расширений: jpg, png, svg, gif, ico, webp, webmanifest, json, xml
src/assets/images
, которые не имеют ни одного из указанных расширений, или если изображения находятся в другом месте, то вам следует изменить path.src.images
соответствующим образом, чтобы изображения копировались в папку dist/assets/images
.src/images
и имеют расширение .jpg
, вы можете изменить path.src.images
на src/images/*.jpg
.Если ответ помог, не забудьте отметить его как решение вашего вопроса.
e.parameter
, вы можете использовать следующий код:let dealId = e.parameter['data[FIELDS][ID]'];
SpreadsheetApp.getActive().getActiveSheet().getRange(1,2).setValue(dealId);
data[FIELDS]
, поэтому мы используем квадратные скобки для доступа к этому ключу. В кавычках мы указываем строку "data[FIELDS][ID]"
, которая соответствует ключу объекта e.parameter
.freeSeats
, можно добавить аргумент функции bookTickets
, который будет принимать массив выбранных мест. Затем нужно проверить, что все места из выбранного массива находятся в списке свободных мест freeSeats
. Если все места доступны, то их можно забронировать.bookTickets
. Затем можно добавить проверки на соответствие параметров формата и наличия еды заданным значениям в объекте seats
. Если формат фильма или наличие еды не соответствуют требованиям, можно выкинуть ошибку.async function bookTickets(date, time, numTickets, selectedSeats = [], is3D = false, hasFood = false){
try{
const availableSeats = await checkTicketsAvailable(date, time, numTickets);
// проверка наличия выбранных мест
const unavailableSeats = selectedSeats.filter(seat => !seats[date][time].freeSeats.includes(seat));
if (unavailableSeats.length > 0) {
throw new Error(`Места ${unavailableSeats.join(', ')} недоступны`);
}
// проверка формата и наличия продуктов питания
if ((is3D && !seats[date][time].format) || (hasFood && !seats[date][time].food)) {
throw new Error(`Невозможно забронировать билеты с выбранными параметрами`);
}
console.log(`${date} вы забронировали ${numTickets} билетов на время: ${time}`);
if (selectedSeats.length > 0) {
console.log(`Выбранные места: ${selectedSeats.join(', ')}`);
}
if (is3D) {
console.log(`Формат фильма: 3D`);
} else {
console.log(`Формат фильма: 2D`);
}
if (hasFood) {
console.log(`С едой`);
} else {
console.log(`Без еды`);
}
} catch (error) {
console.error(error);
}
}
bookTickets('2023-02-17', '15:00', 2, ['11', '21'], false, true);
selectedSeats
, is3D
и hasFood
для выбора мест, формата фильма и наличия еды соответственно. Затем в функции bookTickets
проверяется доступность выбранных мест и соответствие параметров формата и наличия еды требованиям. Выводится сообщение о бронировании билетов и выбранных параметрах.