#javascript #if-statement #parameters #arguments
#javascript #if-statement #параметры #аргументы
Вопрос:
Использование аргументов / параметров для определения того, какой путь используется с помощью инструкции if / else, работает для меня, но я чувствую, что могло бы быть лучшее решение. Есть ли что-то, что больше похоже на идентификатор, который я мог бы передать вместо аргумента / параметра? Может быть, я слишком много думаю об этом?
У меня есть две отдельные функции, dog () и cat (), каждая из которых вызывает третью функцию: mouse (). В настоящее время я отправляю уникальный аргумент через общий параметр вместе с dog() и cat() для направления каждой функции по разным путям в операторе if / else внутри функции mouse().
Вот мой пример, который работает так, как ожидалось:
cat();
function cat() {
var solo = 1;
var x = 50;
mouse(solo, x);
}
dog();
function dog() {
var solo = 2;
var x = 25;
mouse(solo, x);
}
function mouse(solo, x) {
if (solo == 1) {
console.log(x)
console.log('cat')
} else {
console.log(x)
console.log('dog')
}
}
Есть вторичная проблема, которая заключается в том, что у меня есть много функций, вызывающих mouse(), и я не хочу определять переменную solo
для каждой из них. Я бы предпочел, чтобы функции, которые не solo
определены, просто использовали else
часть условного выражения внутри function mouse()
. Однако я беспокоюсь, что это не очень хорошая практика, поскольку она выдает undefined
ошибку.
Например, это выдает undefined
ошибку.
mouse();
function mouse(solo, x) {
if (solo == 1) {
console.log(x)
console.log('cat')
} else {
console.log(x)
console.log('dog')
}
}
Фактический код:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="js/howler.core.js"></script>
<script src="js/howler.spatial.min.js"></script>
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<script src="timeprobabilities.js"></script>
<script>
///////////////////////////////////////////////////////////////
// MASTER START ///////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// initiates fist call to all clocks to each will start and can then be called again
(function masterStart() {
setTimeout(function() {
A();
TA();
}, 0);
}());
///////////////////////////////////////////////////////////////
// LOOPS SHARED OPTIONS ///////////////////////////////////////
///////////////////////////////////////////////////////////////
var options = {
numberOfSounds: 0,
maxNumberOfSounds: 10
};
function logNumberOfSounds() { // passing options into this before is what broke code
options.numberOfSounds ;
//console.log('Number of sounds is: ' options.numberOfSounds '########');
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// LOOP A ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function A() {
var optionsA = {
// start time minimum and maximum
startMinA: 0,
startMaxA: 8000,
playDurationMinA: 20000,
playDurationMaxA: 20000,
maxVolumeA: 1,
//
startMinB: 0,
startMaxB: 30000,
playDurationMinB: 20000,
playDurationMaxB: 20000,
maxVolumeB: 1,
//
startMinC: 0,
startMaxC: 30000,
playDurationMinC: 20000,
playDurationMaxC: 20000,
maxVolumeC: 1,
//
startMinD: 0,
startMaxD: 30000,
playDurationMinD: 20000,
playDurationMaxD: 20000,
maxVolumeD: 1,
//
startMinE: 0,
startMaxE: 30000,
playDurationMinE: 20000,
playDurationMaxE: 20000,
maxVolumeE: 1,
//
startMinF: 0,
startMaxF: 30000,
playDurationMinF: 20000,
playDurationMaxF: 20000,
maxVolumeF: 1,
//
startMinG: 0,
startMaxG: 30000,
playDurationMinG: 20000,
playDurationMaxG: 20000,
maxVolumeG: 1,
//
startMinH: 0,
startMaxH: 30000,
playDurationMinH: 20000,
playDurationMaxH: 20000,
maxVolumeH: 1,
//
startMinI: 0,
startMaxI: 30000,
playDurationMinI: 20000,
playDurationMaxI: 20000,
maxVolumeI: 1,
//
startMinJ: 0,
startMaxJ: 30000,
playDurationMinJ: 20000,
playDurationMaxJ: 20000,
maxVolumeJ: 1,
//
startMinK: 0,
startMaxK: 30000,
playDurationMinK: 20000,
playDurationMaxK: 20000
};
localClock();
function localClock() {
setTimeout(function() {
soundA(options, optionsA);
}, 10); // these need to be called with delay so they don't use the other functions' paramaters
}
function soundA() {
soundTA(1, 1); // Use something like this to call soundTA() so that the if/else statement will skip soundTA()
var soundFileName = 'audio/60.wav';
var fadeIn = 8000;
var fadeOut = 8000;
// calculates startDelay
(function() {
if (probabilityValue < probabilityPointA) {
var startDelay = calculateStartDelay(optionsA.startMinA, optionsA.startMaxA);
} else if (probabilityValue < probabilityPointB) {
var startDelay = calculateStartDelay(optionsA.startMinB, optionsA.startMaxB);
} else if (probabilityValue < probabilityPointC) {
var startDelay = calculateStartDelay(optionsA.startMinC, optionsA.startMaxC);
} else if (probabilityValue < probabilityPointD) {
var startDelay = calculateStartDelay(optionsA.startMinD, optionsA.startMaxD);
} else if (probabilityValue < probabilityPointE) {
var startDelay = calculateStartDelay(optionsA.startMinE, optionsA.startMaxE);
} else if (probabilityValue < probabilityPointF) {
var startDelay = calculateStartDelay(optionsA.startMinF, optionsA.startMaxF);
} else if (probabilityValue < probabilityPointG) {
var startDelay = calculateStartDelay(optionsA.startMinG, optionsA.startMaxG);
} else if (probabilityValue < probabilityPointH) {
var startDelay = calculateStartDelay(optionsA.startMinH, optionsA.startMaxH);
} else if (probabilityValue < probabilityPointI) {
var startDelay = calculateStartDelay(optionsA.startMinI, optionsA.startMaxI);
} else if (probabilityValue < probabilityPointJ) {
var startDelay = calculateStartDelay(optionsA.startMinJ, optionsA.startMaxJ);
} else {
var startDelay = calculateStartDelay(optionsA.startMinK, optionsA.startMaxK);
}
masterStart(startDelay);
})();
function calculateStartDelay(startMin, startMax) {
return Math.floor(Math.random() * startMax) startMin;
}
function calculatePlayDuration(playDurationMin, playDurationMax) {
return Math.floor((Math.random() * playDurationMax) playDurationMin);
}
function masterStart(startDelay) {
setTimeout(function() {
if (probabilityValue < probabilityPointA) {
var maxVolume = optionsA.maxVolumeA;
var playDuration = calculatePlayDuration(optionsA.playDurationMinA, optionsA.playDurationMaxA);
localClock();
} else if (probabilityValue < probabilityPointB) {
var maxVolume = optionsA.maxVolumeB;
var playDuration = calculatePlayDuration(optionsA.playDurationMinB, optionsA.playDurationMaxB);
localClock();
} else if (probabilityValue < probabilityPointC) {
var maxVolume = optionsA.maxVolumeC;
var playDuration = calculatePlayDuration(optionsA.playDurationMinC, optionsA.playDurationMaxC);
localClock();
} else if (probabilityValue < probabilityPointD) {
var maxVolume = optionsA.maxVolumeD;
var playDuration = calculatePlayDuration(optionsA.playDurationMinD, optionsA.playDurationMaxD);
localClock();
} else if (probabilityValue < probabilityPointE) {
var maxVolume = optionsA.maxVolumeE;
var playDuration = calculatePlayDuration(optionsA.playDurationMinE, optionsA.playDurationMaxE);
localClock();
} else if (probabilityValue < probabilityPointF) {
var maxVolume = optionsA.maxVolumeF;
var playDuration = calculatePlayDuration(optionsA.playDurationMinF, optionsA.playDurationMaxF);
localClock();
} else if (probabilityValue < probabilityPointG) {
var maxVolume = optionsA.maxVolumeG;
var playDuration = calculatePlayDuration(optionsA.playDurationMinG, optionsA.playDurationMaxG);
localClock();
} else if (probabilityValue < probabilityPointH) {
var maxVolume = optionsA.maxVolumeH;
var playDuration = calculatePlayDuration(optionsA.playDurationMinH, optionsA.playDurationMaxH);
localClock();
} else if (probabilityValue < probabilityPointI) {
var maxVolume = optionsA.maxVolumeI;
var playDuration = calculatePlayDuration(optionsA.playDurationMinI, optionsA.playDurationMaxI);
localClock();
} else if (probabilityValue < probabilityPointJ) {
var maxVolume = optionsA.maxVolumeJ;
var playDuration = calculatePlayDuration(optionsA.playDurationMinJ, optionsA.playDurationMaxJ);
localClock();
} else {
var maxVolume = optionsA.maxVolumeK;
var playDuration = calculatePlayDuration(optionsA.playDurationMinK, optionsA.playDurationMaxK);
}
loop(options, playDuration, soundFileName, maxVolume, fadeIn, fadeOut);
console.log('A: ////////////////////////////////// ');
}, startDelay);
}
}
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// SHARED LOOP ///////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function loop(options, playDuration, soundFileName, maxVolume, fadeIn, fadeOut) {
//console.log('LOOP: soundFileName: ' soundFileName);
//console.log('LOOP: playDuration: ' playDuration);
//console.log('LOOP: maxVolume: ' maxVolume);
if (options.numberOfSounds < options.maxNumberOfSounds) { //Don't create more than the max number of sounds.
var sound = getSound(soundFileName);
var id2 = sound.play();
logNumberOfSounds();
sound.volume(0);
sound.fade(0, maxVolume, fadeIn, id2); // FADE IN
setTimeout(function() {
sound.fade(maxVolume, 0, fadeOut, id2); // FADE OUT
options.numberOfSounds--;
// Attempt to clean up the sound object
setTimeout(function() {
sound.stop();
sound.unload();
}, fadeOut 1000);
}, playDuration);
}
}
// PLAYER FOR MAIN SOUND FUNCTION /////////////////////////////
function getSound(soundFileName) {
return new Howl({
src: [soundFileName],
autoplay: true,
loop: true,
volume: 0,
fade: 0 // removes the blip
});
}
function TA() {
var optionsA = {
reduceVolume: .7,
///////////////////////////
minSamplesA: 0,
maxSamplesA: 2,
startMinA: 0,
startMaxA: 9000,
minDelayA: 3000,
maxDelayA: 10000,
maxVolumeA: 1,
//
minSamplesB: 1,
maxSamplesB: 2,
startMinB: 0,
startMaxB: 5000,
minDelayB: 3000,
maxDelayB: 10000,
maxVolumeB: 1,
//
minSamplesC: 1,
maxSamplesC: 4,
startMinC: 0,
startMaxC: 45000,
minDelayC: 3000,
maxDelayC: 10000,
maxVolumeC: 1,
//
minSamplesD: 1,
maxSamplesD: 5,
startMinD: 0,
startMaxD: 45000,
minDelayD: 3000,
maxDelayD: 10000,
maxVolumeD: 1,
//
minSamplesE: 1,
maxSamplesE: 5,
startMinE: 0,
startMaxE: 45000,
minDelayE: 1000,
maxDelayE: 10000,
maxVolumeE: 1,
//
minSamplesF: 1,
maxSamplesF: 3,
startMinF: 0,
startMaxF: 45000,
minDelayF: 1000,
maxDelayF: 10000,
maxVolumeF: 1,
//
minSamplesG: 1,
maxSamplesG: 5,
startMinG: 0,
startMaxG: 45000,
minDelayG: 2000,
maxDelayG: 10000,
maxVolumeG: 1,
//
minSamplesH: 1,
maxSamplesH: 4,
startMinH: 0,
startMaxH: 45000,
minDelayH: 3000,
maxDelayH: 10000,
maxVolumeH: 1,
//
minSamplesI: 1,
maxSamplesI: 3,
startMinI: 0,
startMaxI: 45000,
minDelayI: 2000,
maxDelayI: 10000,
maxVolumeI: 1,
//
minSamplesJ: 1,
maxSamplesJ: 2,
startMinJ: 0,
startMaxJ: 45000,
minDelayJ: 3000,
maxDelayJ: 10000,
maxVolumeJ: 1,
//
minSamplesK: 0,
maxSamplesK: 1,
startMinK: 0,
startMaxK: 45000,
minDelayK: 3000,
maxDelayK: 10000,
maxVolumeK: 1
};
localClock();
function localClock() {
soundTA(optionsA);
/*
// THIS IS WHERE I'M TRYING TO CREATE THE IF/ELSE STATEMENT THAT WILL SKIP soundTA() when TA() is called by another function, A() for example.
if (foo == bar) {
var maxVolume = 1;
var numberOfSamples = 1;
playThunder(numberOfSamples, maxVolume);
}
else {
// do the normal thing and don't skip soundTA()
soundTA(optionsA);
}
*/
}
function soundTA() {
console.log('TA(); blunt wood');
(function() {
if (probabilityValue < probabilityPointA) {
var startDelay = calculateStartDelay(optionsA.startMinA, optionsA.startMaxA);
var minDelay = calculateMinDelay(optionsA.minDelayA, optionsA.maxDelayA);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeA);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesA, optionsA.maxSamplesA);
} else if (probabilityValue < probabilityPointB) {
var startDelay = calculateStartDelay(optionsA.startMinB, optionsA.startMaxB);
var minDelay = calculateMinDelay(optionsA.minDelayB, optionsA.maxDelayB);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeB);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesB, optionsA.maxSamplesB);
} else if (probabilityValue < probabilityPointC) {
var startDelay = calculateStartDelay(optionsA.startMinC, optionsA.startMaxC);
var minDelay = calculateMinDelay(optionsA.minDelayC, optionsA.maxDelayC);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeC);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesC, optionsA.maxSamplesC);
} else if (probabilityValue < probabilityPointD) {
var startDelay = calculateStartDelay(optionsA.startMinD, optionsA.startMaxD);
var minDelay = calculateMinDelay(optionsA.minDelayD, optionsA.maxDelayD);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeD);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesD, optionsA.maxSamplesD);
} else if (probabilityValue < probabilityPointE) {
var startDelay = calculateStartDelay(optionsA.startMinE, optionsA.startMaxE);
var minDelay = calculateMinDelay(optionsA.minDelayE, optionsA.maxDelayE);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeE);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesE, optionsA.maxSamplesE);
} else if (probabilityValue < probabilityPointF) {
var startDelay = calculateStartDelay(optionsA.startMinF, optionsA.startMaxF);
var minDelay = calculateMinDelay(optionsA.minDelayF, optionsA.maxDelayF);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeF);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesF, optionsA.maxSamplesF);
} else if (probabilityValue < probabilityPointG) {
var startDelay = calculateStartDelay(optionsA.startMinG, optionsA.startMaxG);
var minDelay = calculateMinDelay(optionsA.minDelayG, optionsA.maxDelayG);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeG);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesG, optionsA.maxSamplesG);
} else if (probabilityValue < probabilityPointH) {
var startDelay = calculateStartDelay(optionsA.startMinH, optionsA.startMaxH);
var minDelay = calculateMinDelay(optionsA.minDelayH, optionsA.maxDelayH);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeH);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesH, optionsA.maxSamplesH);
} else if (probabilityValue < probabilityPointI) {
var startDelay = calculateStartDelay(optionsA.startMinI, optionsA.startMaxI);
var minDelay = calculateMinDelay(optionsA.minDelayI, optionsA.maxDelayI);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeI);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesI, optionsA.maxSamplesI);
} else if (probabilityValue < probabilityPointJ) {
var startDelay = calculateStartDelay(optionsA.startMinJ, optionsA.startMaxJ);
var minDelay = calculateMinDelay(optionsA.minDelayJ, optionsA.maxDelayJ);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeJ);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesJ, optionsA.maxSamplesJ);
} else {
var startDelay = calculateStartDelay(optionsA.startMinK, optionsA.startMaxK);
var minDelay = calculateMinDelay(optionsA.minDelayK, optionsA.maxDelayK);
var maxVolume = calculateMaxVolume(optionsA.reduceVolume, optionsA.maxVolumeK);
var numberOfSamples = calculateNumberOfSamples(optionsA.minSamplesK, optionsA.maxSamplesK);
}
masterStart(startDelay, minDelay, maxVolume, numberOfSamples);
})();
function masterStart(startDelay, minDelay, maxVolume, numberOfSamples) {
setTimeout(function() {
var elapsedTime = Date.now() - startTime;
if (elapsedTime > minDelay) {
if (probabilityValue < probabilityPointJ) {
localClock();
}
playThunder(numberOfSamples, maxVolume);
elapsedTime = Date.now() - Date.now(); // define when requiring wait between sample plays
startTime = Date.now();
} else { // keep triggering the master clock until the wait time has passed
setTimeout(function() {
localClock();
}, 500);
}
}, startDelay);
}
}
function getSoundB(soundFileName, maxVolume, reduceVolume, loop) { // confirmed: these are the 3 arguments from getSound
var volume = calculateReduceVolume(reduceVolume, maxVolume);
console.log('maxVolume: ' maxVolume)
console.log('volume: ' volume)
return new Howl({
src: [soundFileName],
autoplay: false,
loop: loop,
volume: volume,
fade: 0
//pan: 1
});
}
function playThunder(numberOfSoundsToPlay, maxVolume) {
var potentialThunderSounds = [ // blunt wood hits
getSoundB('audio/35.wav', maxVolume, 0, false),
getSoundB('audio/36.wav', maxVolume, 0, false),
getSoundB('audio/37.wav', maxVolume, 0, false),
getSoundB('audio/38.wav', maxVolume, 0, false),
getSoundB('audio/39.wav', maxVolume, 0, false),
getSoundB('audio/40.wav', maxVolume, 0, false),
getSoundB('audio/41.wav', maxVolume, 0, false),
getSoundB('audio/42.wav', maxVolume, 0, false),
getSoundB('audio/43.wav', maxVolume, 0, false),
getSoundB('audio/44.wav', maxVolume, 0, false),
getSoundB('audio/45.wav', maxVolume, 0, false),
getSoundB('audio/46.wav', maxVolume, 0, false),
getSoundB('audio/47.wav', maxVolume, 0, false),
getSoundB('audio/48.wav', maxVolume, 0, false),
getSoundB('audio/50.wav', maxVolume, 0, false),
getSoundB('audio/51.wav', maxVolume, 0, false),
getSoundB('audio/52.wav', maxVolume, 0, false),
getSoundB('audio/53.wav', maxVolume, 0, false),
getSoundB('audio/54.wav', maxVolume, 0, false),
getSoundB('audio/55.wav', maxVolume, 0, false),
getSoundB('audio/56.wav', maxVolume, 0, false),
getSoundB('audio/57.wav', maxVolume, 0, false),
getSoundB('audio/58.wav', maxVolume, 0, false),
getSoundB('audio/59.wav', maxVolume, 0, false)
];
var soundSequence = [];
//Randomly pick sounds from the potential sounds and add them to the list
for (var x = 0; x < numberOfSoundsToPlay; x ) {
var soundIndex = Math.round(Math.random() * (potentialThunderSounds.length - 1));
soundSequence.push(potentialThunderSounds[soundIndex]);
}
playSoundIfThereIsOne();
function playSoundIfThereIsOne() {
var currentSound = soundSequence[0];
currentSound.play();
soundSequence.shift();
currentSound.once('end', playSoundIfThereIsOne);
}
}
} // End Thunder Function
</script>
<script src="sharedloop.js"></script>
<!--contains the shared functions for the main loops-->
<script src="thunders.js"></script>
<script src="js/howler.core.js"></script>
<script src="js/siriwave.js"></script>
<script src="js/player.js"></script>
</body>
</html>
Комментарии:
1. Когда вы пытаетесь войти в систему
x
, которая не определена, она будет регистрироватьсяundefined
. Я не вижу здесь никакихTypeError
orSyntaxError
. Не могли бы вы, пожалуйста, уточнить? Кроме того, это определенно относится кelse
части.2. Вам не нужно каждый раз определять переменную, вы можете просто вызвать
mouse(1, 25);
Звучит так, как будто вы думаете, что вам нужно передать переменную namesolo
, чтобы иметь возможность прочитать ее внутриmouse
, но это не так. И ссылка на неопределенные переменные не имеет большого значения, например, вы можете сделатьif (x) console.log(x)
, чтобы регистрировать их только в том случае, если они определены.3. Можете ли вы показать часть своего фактического кода? Приведенный вами пример кода не очень подходит для того, чтобы показать, как его улучшить, в основном потому, что функции должны устранять дублирующийся код, но ваша функция mouse сама содержит дублирующийся код.
4. Спасибо, @Praveen, это правда, я не получаю никаких других ошибок, просто «не определено». Допустимо ли иметь что-то неопределенное? Он переходит к другой части функции, которая работает должным образом.
5. @forestkelley Это определенно нормально. Это ведение журнала, потому что вы ведете журнал. Вы можете избежать регистрации undefined, как это сделал ChrisG в своих комментариях выше.
:)
Ответ №1:
Вместо этого можно поместить некоторый абстрактный идентификатор в solo
переменную, поместить значение, которое будет использоваться непосредственно в «алгоритме» (здесь просто выведите в консоли).
cat();
function cat() {
var x = 50;
mouse('cat', x);
}
dog();
function dog() {
var x = 25;
mouse('dog', x);
}
function mouse(solo, x) {
console.log(x)
console.log(solo)
}
В дальнейшем вы можете разделить функцию мыши на отдельные функции дерева — одну, которая имеет общие «вычисления», и две, которые имеют индивидуальные вычисления для собаки и кошки
Комментарии:
1. Это. Это самое простое и наилучшее решение, если только нет дополнительных ограничений, о которых OP нам не сообщил. Но даже их, вероятно, следует решать путем отправки более сложных значений, а не путем выполнения ветвления в
mouse
.2. @Bergi вы хотите сказать, что отправка более сложных значений является желательной стратегией? Ветвление — это плохо? (Я пока не совсем понимаю, что означают эти термины, но мне интересно)
3. @forestkelley Сложно давать абсолютные и общие рекомендации в комментариях 🙂 Но фактический код, который вы опубликовали, показывает, что моя догадка была правильной. Эти
if/else
лестницы ужасны! Вместо этого используйте соответствующую структуру данных, например массив объектов, для вашегоoptionsA
, а затем найдите нужный объект (индекс) для работы с помощью цикла.4. @Bergi похоже, мне нужно немного научиться. Некоторые из используемых вами терминов (лестницы и структуры данных) Я не знаком с. И я не совсем уверен, как вы представляете себе структурирование этого массива объектов, но я проведу некоторый поиск. Если у вас есть ссылка, которая демонстрирует эти подходы, я бы хотел посмотреть. Спасибо за совет. Я с нетерпением жду более чистого подхода!
5. @forestkelley «Лестница» — это просто жаргонный термин для длинного ряда
if … else if … else if …
. Структуры данных (и алгоритмы на них) являются наиболее важным инструментом для программирования, вы определенно должны узнать о них. Я имею в виду использование массива[{startMin: 0, startMax: 8000, …}, {startMin:0, startMax: 30000, …}, …]
вместо перечисленных «групп» свойств.
Ответ №2:
вы можете установить значение по умолчанию.
например
mouse();
function mouse(solo=false, x=false) {
if (solo == 1) {
console.log(x)
console.log('cat')
} else {
console.log(x)
console.log('dog')
}
}
затем вы можете проверить это, и переменные будут определены автоматически, также, если они не заданы в качестве параметра
кроме того, в более старом браузере вы можете сделать это также таким образом:
function mouse(solo, x) {
if(solo === undefined) {
solo = false;
}
if(x === undefined) {
x = false;
}
if (solo == 1) {
console.log(x)
console.log('cat')
} else {
console.log(x)
console.log('dog')
}
}
Комментарии:
1. затем нажмите F12, ctrl c и ctrl v и попробуйте это
2. Ну, я не такой тупой, иначе я не стал бы заниматься проектом Chromium. 😉
3. что ж, я согласен с вашей правкой в том, что я также не знаю, работает ли это во всех браузерах. Но это происходит, по крайней мере, в текущих Chrome и Firefox.
4. Да. Это верно. Я знаю об этом. В любом случае, спасибо, приятель. 😇
Ответ №3:
Я не уверен, зачем вам нужно if else, когда вы делаете одно и то же в каждой ветви этого дерева решений. Если вы параметризуете выходные данные, вы можете сделать что-то подобное с помощью частичного приложения:
const mouse = (x, output) => () => {
console.log(x);
console.log(output);
}
const dog = mouse(25, "dog")();
const cat = mouse(50, "cat")();
Комментарии:
1. В моем реальном коде каждая ветвь выполняет разные действия.
Ответ №4:
Вы можете упростить задачу, используя каррирование, как в следующем коде:
const animal = (pet) => (solo,x) => console.log(pet, x, solo);
animal('dog')(25,1);
animal('cat')(50,2);
Функция animal принимает ‘name’ животного и передает его анонимной функции, которая принимает параметры solo и x, которые также передаются в операцию терминала — в данном случае для входа в консоль. Поскольку в вашем примере в каждом случае вызывается мышь, которая выполняет только операцию протоколирования, здесь она используется как операция терминала.
Обратите внимание на отсутствие необходимости в конструкции if / else в этом случае.
Комментарии:
1. Я заинтригован этим ответом, но пока недостаточно разбираюсь в currying, чтобы знать, удовлетворит ли это мои потребности. Мне потребуется некоторое время, чтобы обдумать это и отчитаться.
2. когда у вас появятся вопросы, задавайте. Я буду рад объяснить.