С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495

Напишите функцию filterRange(arr, a, b), которая принимает массив arr, ищет в нём элементы между a и b

08.01.2020, 21:06. Показов 7059. Ответов 7
Метки js (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Всех с прошедшими праздниками!

Сегодня, пишу с целью задать несколько вопросов. У меня есть задачка:
Напишите функцию filterRange(arr, a, b), которая принимает массив arr, ищет в нём элементы между a и b и отдаёт массив этих элементов.

Функция должна возвращать новый массив и не изменять исходный.
Например:

JavaScript
1
2
3
4
5
6
7
let arr = [5, 3, 8, 1];
 
let filtered = filterRange(arr, 1, 4);
 
alert( filtered ); // 3,1 (совпадающие значения)
 
alert( arr ); // 5,3,8,1 (без изменений)
Делал в консоли(chrome) - все работает, но результат - "", хотя я дебагом прошёлся несколько раз видел как значения записываються и в созданом массиве есть елементы

Потом решил написать скрипт на компе(создавая .js файл). Открывал скрипт с помощью Node.js через cmd - выбило, что в созданном массиве ничего нету - undefined...

Вот код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function filterRange(arr, a, b) {
    let resultArr = [];
    return arr.map((item) => { if (item < b && item >= a) resultArr.push(item) });
}
let arr = [5, 3, 8, 1];
 
let filtered = filterRange(arr, 1, 4);
 
console.log(filtered); // 3,1 (совпадающие значения)
 
console.log(arr); // 5,3,8,1 (без изменений)
В чём причина такого поведения и как его можно исправить, можно-ли написать этот код с помощью map, как мне бы хотелось?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2020, 21:06
Ответы с готовыми решениями:

Создайте фунцию filterRange(arr, a, b), которая принимает массив чисел
Создайте фунцию filterRange(arr, a, b), которая принимает массив чисел arr и возвращает новый массив, который содержит только числа из arr...

Напишите функцию aclean(arr), которая возвращает массив слов, очищенный от анаграмм
Напишите функцию aclean(arr), которая возвращает массив слов, очищенный от анаграмм. Например: var arr = ; alert(...

Проблемы с методом массива (Array.prototype.p=1 var arr=new Array(); arr.watch('p',alertme) arr.p=2)
Опять я с подобной проблемой. &lt;script language='JavaScript1.2'&gt; function alertme(id,oldValue,newValue){ alert('arr.'+id+' =...

7
409 / 301 / 112
Регистрация: 28.08.2013
Сообщений: 788
08.01.2020, 21:14
Причина: отсутствие знания языка программирования. Читай Array.prototype.slice()
JavaScript
1
2
3
4
5
var array = [5, 3, 8, 1];
function filterRange(arr, a, b){
    return arr.slice(a, b);
}
console.log(filterRange(array, 1, 4));
Результат: Array(3) [ 3, 8, 1 ]
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
08.01.2020, 21:27
Лучший ответ Сообщение было отмечено Iangyl как решение

Решение

Цитата Сообщение от Iangyl Посмотреть сообщение
В чём причина такого поведения
потому что в
JavaScript
1
2
3
4
5
6
7
8
function filterRange(arr, a, b) {
    // инициализация пустым массивом
    let resultArr = [];
    // заполнение resultArr значениями arr по условию
    // а так как map  возвращает новый массив и вы ничего не возвращали в него из arr, используя калбек,
    // возвращается массив с неопределенными значениями.
    return arr.map((item) => { if (item < b && item >= a) resultArr.push(item) }); 
}
Цитата Сообщение от Iangyl Посмотреть сообщение
как его можно исправить, можно-ли написать этот код с помощью map, как мне бы хотелось?
quote="Iangyl;14157833"]
JavaScript
1
2
3
4
5
function filterRange(arr, a, b) {
    let resultArr = [];
    arr.map((item) => { if (item < b && item >= a) resultArr.push(item) });
    return  resultArr;
}
Цитата Сообщение от Iangyl Посмотреть сообщение
как его можно исправить
JavaScript
1
2
3
function filterRange(arr, a, b) {
  return arr.filter(item => item < b && item >= a);
}
kidASM,
Цитата Сообщение от Iangyl Посмотреть сообщение
// 3,1 (совпадающие значения)
имеется ввиду в промежутке от одного значения до другого, первый включительно
1
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
08.01.2020, 22:05  [ТС]
kidASM, slice здесь не подходит - внимательно прочитайте задание...
0
09.01.2020, 15:25

Не по теме:

Цитата Сообщение от Iangyl Посмотреть сообщение
внимательно прочитайте задание
- ух какой строгий! :D

0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
09.01.2020, 15:40
Всем здравствуйте и приятного похмелья!
Как раз тот самый современный защищенный способ записи функции, который плохо читается:
JavaScript
1
const filterRange = (arr, a, b) => arr.filter(e => e >= a && e<= b);

Перечисляю классные фишечки:
- имя функции защищено от дублирования.
- параметр e считается элементом последовательности.
- обе границы входят в диапазон значений. Тут мы противоречим глупой парадигме Java, которая правую границу не включает в диапазон.

Мелкий недостаток такого синтаксиса - отвратительный внешний вид
1
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
10.01.2020, 00:20  [ТС]

Не по теме:

amr-now, было сложно, но я понял. Вы несомненно мастер ниндзя-кода XD



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от klopp Посмотреть сообщение
- ух какой строгий! :D
* не мы такие - жизнь такая

0
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,864
23.11.2021, 10:15
JavaScript
1
2
3
4
5
6
7
8
9
function filterRange(arr, a, b) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
      if (arr[i] >= a && arr[i] <= b) {
          newArr.push(arr[i]);
      }
  }
  return result;
}
JavaScript
1
2
3
function filterRange(arr, a, b) {
  return arr.filter(item => (a <= item && item <= b));
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2021, 10:15
Помогаю со студенческими работами здесь

Описать функцию FillArray(out int[] arr), которая создает и заполняет новый массив
1.Описать функцию FillArray(out int arr), которая создает и заполняет новый массив целочисленных элементов случайным количеством...

Синонимы операций взятия адреса массива (arr и &arr)
возможно коряво написал заголовок, да и сам вопрос банальный. после создании лок. массива его адрес можно получить при помощи его имени или...

Почему *arr И arr[] одинаковые, но в тоже время разные?
Например есть какая-то ф-я:void temp(int &amp;(*arr)) { // . . . } И 2 разных массива которые будем передавать ф-и:int main(void) ...

чем отличается *(arr+1) от *(arr++)?
подскажите пожалуйста в чем отличие между *(arr+1) и *(arr++), допустим char arr=&quot;qwertyuiop&quot;; while(*arr!='\0') { ...

Реализовать функцию, которая принимает массив и возвращает количество простых чисел в нем
Ребят , есть задачи , а в частности нужно с помощью функций и деления по остатку (%) написать несколько программ , а именно : 1)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru