Должен ли я использовать методы массива, такие как map и filter, если я не собираюсь ничего возвращать? - PullRequest
0 голосов
/ 02 мая 2018

В прошлом году я чаще использовал методы массива, такие как map и filter , вместо стандартного цикла for в массиве. Его проще читать и писать, и он выполняет все, что я, скорее всего, собираюсь делать, например, создавать локальную переменную.

Часто я ничего не возвращаю. Эслинт мне не очень нравится. По их словам, они говорят, что вы всегда нуждаетесь в возврате, в противном случае «вероятно, ошибка» https://eslint.org/docs/rules/array-callback-return

Почему? Это просто хорошая практика? Каковы недостатки метода массива без возврата?

Некоторое время думал об этом. Любое понимание или мысли было бы замечательно.

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Должен ли я использовать методы массива, такие как map и filter, если я не собираюсь ничего возвращать?

Нет, не стоит.

Почему? Это просто хорошая практика?

Да. Хорошей практикой является использование подходящего метода итерации для типа выполняемой итерации. Есть множество способов итераций по причине. Выберите подходящий механизм.

Каковы недостатки метода массива без возврата?

Использование .map() и .filter() без фактического возврата чего-либо из обратного вызова имеет следующие недостатки:

  1. Ваш код вводит в заблуждение. Смысл .map() и .filter() состоит в том, чтобы перебрать массив и создать новый массив. Когда разработчик читает какой-то код и видит, что используются .map() или .filter(), он ожидает, что должен быть возвращенный массив. Когда они не видят, как это делается таким образом, они будут сбиты с толку, сначала почувствуют, что не понимают код. Если бы я проводил проверку кода на подобный код, я бы не одобрил такой код.

  2. Ваш код излишне создает объекты, которые не используются. Это просто расточительно. И любая практика, которая расточительна и есть простой и не расточительный способ сделать это (используя .forEach() или for/of), не является хорошей практикой.

  3. Ваш код не будет задерживаться. Линтеры дают основания для возражений. Использование .map() или .filter() без возврата чего-либо из обратного вызова - это, как говорит Линтер, «вероятно, ошибка программирования», потому что эти функции не предназначены для использования, и есть подходящие альтернативы, когда вы этого не делаете. хочу возвращаемый массив.

Итак, если вы просто пытаетесь выполнить итерацию без создания какого-либо результирующего массива, используйте for/of или .forEach() или какую-либо другую итерационную схему, которая специально не предназначена для создания выходного массива, который вы не делаете хочу.

0 голосов
/ 02 мая 2018

Сначала вам нужно узнать о разнице между картой / фильтром и forEach.

resuming .. forEach чаще всего используется, когда вы хотите перебрать массив с / в качестве процедуры. проверка

Карта и фильтр связаны с функцией обратного вызова, применяемой на каждой итерации. Оператор return из них - это то, что будет оцениваться, а не функция By the Map / Filter в конце. Причина, почему это необходимо. Althought JS допускает «что угодно». И, конечно, вы можете определить эту функцию, которая становится понятной нам как «Фильтр».

Для фильтра вы можете видеть, что «истина» и «ложь», как когда «данные» будут фильтроваться или нет.

0 голосов
/ 02 мая 2018

В основном вы можете выполнить цикл с map или forEach / for, разница в следующем:

foreach: Это перебирает список и применяет некоторые операции с побочными эффектами к каждому члену списка, это означает, что вы преобразуете ТЕКУЩИЙ Массив, который вы зацикливаете .... или, как заметил @TiagoCoelho вы вообще не связываетесь с массивом, просто подумал цикл.

map: Это повторяет список, преобразует каждого члена этого списка и возвращает другой список того же размера с преобразованными членами, это означает, что вы получите BRAND NEW ARRAY с измененным элементы, и вы также будете иметь в памяти ваш старый массив.

так что в основном это зависит от того, что вы хотите делать с данными внутри вашего массива.

Ссылки

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Примеры:

var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4];
//multiply each item for 2, it will stay on the same array.
a.forEach(i => {
  i = i * 2
})


//multiply the items of B for 2 but it will return a new array
var c = b.map(i => {
  return i * 2
})

console.log(a); //modified reference
console.log(b); //stays the same
console.log(c); //new array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...