#javascript
#javascript
Вопрос:
У меня есть некоторые проблемы с этой функцией, которая имеет FirstValue(число), LastValue(число) и dataArray(массив).Функция имеет проверку firstvalue < LastValue, а количество записей в массиве данных должно быть больше 5. Функция будет искать данные в массиве данных, которые имеют значение между firstvalue и LastValue, сортировать результаты поиска и отображать их на консоли.
Это то, что я получил до сих пор. Я раньше не использовал Javascript, поэтому буду признателен за любую помощь.
let result ="";
function valueSelection(firstValue, lastValue, ...dataArray){
if(firstValue > lastValue) {
console.log("The last value must be greater than first value");
if(dataArray.length < 5) {
console.log("Numbers in dataArray must be more than 5");
} else {
console.log(result);
}
} else {
console.log(result);
}
}
valueSelection(5, 20 , [2, 25, 4, 14, 17, 30, 8])
результат, который я хочу, это:
[8, 14, 17]
Ошибка обработки :
Выбор значений(15, 3 , [2, 25, 4, 14, 17, 30, 8])
вывод: "The last value must be greater than first value"
Выбор значений(4, 17 , [2, 25, 4])
вывод: Numbers in dataArray must be more than 5
Комментарии:
1. Здесь указан используемый вами браузер: caniuse.com/?search=spread operator
2. Кроме того, вы говорите, что желаемый результат равен [8, 14, 17] . Как вы к этому пришли? Ваш ввод для FirstValue равен 5, а LastValue равно 20. Оператор if имеет значение false, поэтому он переходит к console.log(результат). Значение для результата — это просто пустая строка, как показано в самой первой строке вашего кода. Вы ожидали где-то изменить значение результата?
3. Каков процесс получения
[8, 14, 17]
?4. @kojow7 я думаю, что он просит помочь разобраться с остальной частью алгоритма. Я думаю, что он получил [8, 14, 17], поскольку он находится между 5 и 20.
5. спасибо, ребята, за то, что выяснили, это сделано
Ответ №1:
Взгляните на документацию MDN для синтаксиса распространения, я не думаю, что вам нужно использовать ее для этого вопроса:
function valueSelection(firstValue, lastValue, dataArray) {
if (firstValue > lastValue) {
console.error("lastValue must be greater than firstValue");
}
else if (dataArray.length < 5) {
console.error("dataArray must contain 5 or more numbers");
} else {
const result = dataArray.filter(x => x >= firstValue amp;amp; x <= lastValue);
console.log(result.sort((a, b) => a - b));
}
}
valueSelection(5, 20, [2, 25, 4, 14, 17, 30, 8]);
valueSelection(15, 3, [2, 25, 4, 14, 17, 30, 8]);
valueSelection(4, 17, [2, 25, 4]);
Другие соответствующие ссылки:
Ответ №2:
Вам вообще не требуется операция распространения.
Я также улучшил логику, чтобы она работала более эффективно 🙂
function valueSelection(firstValue, lastValue, dataArray){
let result = []
console.log(dataArray.length)
if(firstValue < lastValue amp;amp; dataArray.length > 5 ) {
result = dataArray.filter(data => data > firstValue amp;amp; data < lastValue )
console.log(result.reverse())
return result.reverse()
} else {
console.log("The last value must be greater than first value and Numbers in dataArray must be more than 5" );
}
}
valueSelection(5, 20 , [2, 25, 4, 14, 17, 30, 8])
Ответ №3:
Вам не нужен оператор распространения, если вы передадите массив в качестве параметра.
При использовании «… dataArray» происходит то, что все параметры, начинающиеся с позиции 2, будут добавлены в массив в качестве элемента.
Итак, в вашем примере вашим третьим параметром является массив [2, 25, 4, 14, 17, 30, 8] и после этого у тебя больше ничего не будет.
в результате чего
let result ="";
function valueSelection(firstValue, lastValue, ...dataArray){
//firstValue = 4, lastValue = 17, dataArray [ [2, 25, 4, 14, 17, 30, 8]] which is, an array where the first element is the array you sent as param
if(firstValue > lastValue) {
console.log("The last value must be greater than first value");
if(dataArray.length < 5) {
console.log("Numbers in dataArray must be more than 5");
} else {
console.log(result);
}
} else {
console.log(result);
}
}
valueSelection(5, 20 , [2, 25, 4, 14, 17, 30, 8])
если вы удалите оператор распространения, код будет работать так, как вы хотите.
Использование …dataArray имело бы смысл, если бы вместо отправки массива в качестве третьего параметра вы отправляли кучу одиночных чисел, как в этом примере
let result ="";
function valueSelection(firstValue, lastValue, ...dataArray){
//firstValue = 4, lastValue = 17, dataArray [2, 25, 4, 14, 17, 30, 8] an array made of all the parameters sent starting for the third one
if(firstValue > lastValue) {
console.log("The last value must be greater than first value");
if(dataArray.length < 5) {
console.log("Numbers in dataArray must be more than 5");
} else {
console.log(result);
}
} else {
console.log(result);
}
}
valueSelection(5, 20 , 2, 25, 4, 14, 17, 30, 8)
Ответ №4:
Пара ошибок в вашем коде. Кроме того, вы не объясняете, как вы получаете результат, поэтому я предполагаю, что значения должны быть между firstValue
и lastValue
. Вы также должны throw
обнаруживать ошибки и перехватывать их в try-catch
.
function valueSelection(firstValue, lastValue, dataArray) {
if (firstValue > lastValue) return "The last value must be greater than first value";
if (dataArray.length < 5) return "Numbers in dataArray must be more than 5";
let result = [];
for (let i = 0; i < dataArray.length; i ) {
const v = dataArray[i];
if (v > firstValue amp;amp; v < lastValue) result.push(v);
}
return result.sort((a, b) => a - b);
}
console.log(valueSelection(5, 20, [2, 25, 4, 14, 17, 30, 8]));
//the output I want is: [8, 14, 17]
//HandlingError :
console.log(valueSelection(15, 3, [2, 25, 4, 14, 17, 30, 8]));
//output:"The last value must be greater than first value"
console.log(valueSelection(4, 17, [2, 25, 4]));
//output: Numbers in dataArray must be more than 5